J'ai créé un type comme celui-ci:Pourquoi IsAssignableFrom et GetInterface donnent des résultats différents
TypeBuilder tb = moduleBuilder.DefineType(myname, TypeAttributes.Class |
TypeAttributes.Public, typeof(BaseClass), new Type[] { typeof(ImyInterface) });
Ensuite, beaucoup de code ilgenerating suit pour les constructeurs, méthodes, etc. Quand je commence à utiliser la classe j'ai remarqué quelque chose d'étrange. Je veux vérifier si le type 'myname' que j'ai créé implémente réellement l'ImyInterface. J'attendre à ce que les deux déclarations suivantes 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??
}
J'ai donc créé une classe qui implémente IMyInterface mais qui est incessible à un objet de type IMyInterface, qu'est-ce que je manque?
Par ailleurs, il n'y a pas de génériques en cause et l'interface est juste un de base pour tester le concept:
public interface ITestInterface
{
int CalcSquaredInteger(int number);
}
y a-t-il des génériques impliqués? comment l'interface est-elle déclarée? –
Pas de génériques, j'ai ajouté l'exemple d'interface à la question. – Yodah
Qu'est-ce que "ImyInterface" dans le code ci-dessus? Considérant que vous appelez un "nom" de la propriété, cela ne peut pas être juste une interface, n'est-ce pas? –