ho creato un tipo come questo:Perché IsAssignableFrom e GetInterface dare risultati diversi
TypeBuilder tb = moduleBuilder.DefineType(myname, TypeAttributes.Class |
TypeAttributes.Public, typeof(BaseClass), new Type[] { typeof(ImyInterface) });
poi un sacco di ilgenerating codice seguente per i costruttori, metodi ecc Quando inizio a utilizzare la classe ho notato qualcosa di strano. Voglio verificare se il tipo "myname" che ho creato implementa davvero ImyInterface. Mi aspetterei che entrambe le seguenti istruzioni return true:
// t is Type 'myName'
Type baseInterface = t.GetInterface(typeof(ImyInterface).name);
if (baseType != null)
{
// this is actually true, as I expected
}
if (typeof(ImyInterface).isAssignableFrom(t))
{
// the if clause is false, but I don't have a clue why??
}
Così ho creato una classe che implementa IMyInterface ma che non è assegnabile a un oggetto di tipo IMyInterface, cosa mi manca?
A proposito, non ci sono generici coinvolti e l'interfaccia è solo uno di base per testare il concetto:
public interface ITestInterface
{
int CalcSquaredInteger(int number);
}
ci sono generici coinvolti? come viene dichiarata l'interfaccia? –
No generici, ho aggiunto l'interfaccia di esempio alla domanda. – Yodah
Che cos'è "ImyInterface" nel codice sopra? Considerando che stai chiamando un "nome" di proprietà su di esso non può essere solo un'interfaccia può? –