Question

En utilisant la réflexion dans .Net, quelle est la différence entre:

   if (foo.IsAssignableFrom(typeof(IBar)))

Et

   if (foo.GetInterface(typeof(IBar).FullName) != null)

Qu'est-ce qui est plus approprié, pourquoi?

Quand l'un ou l'autre pourrait-il échouer?

Était-ce utile?

La solution

Si vous voulez juste voir si un type implémente une interface donnée, cela va bien, mais GetInterface () est probablement plus rapide puisque IsAssignableFrom () effectue plus de contrôles internes que GetInterface (). Il sera probablement encore plus rapide de vérifier les résultats de Type.GetInterfaces (), qui renvoie la même liste interne que les deux méthodes utilisent de toute façon.

Autres conseils

Il existe une différence dans la gestion des classes internes. Prenez le cours suivant:

public interface IFoo
{
}    

internal class Foo: IFoo
{
}

Cela vous donnera une liste d'un élément:

var types = typeof(IFoo).Assembly.GetTypes()
            .Where(x => x.GetInterface(typeof(IFoo).FullName) != null)
            .ToList();

Considérant que cela vous donnera une liste vide:

var types = typeof(IFoo).Assembly.GetTypes()
            .Where(x => x.IsAssignableFrom(typeof(IFoo))
            .ToList();
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top