Domanda

Utilizzando la riflessione in .Net, qual è la differenza tra:

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

E

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

Quale è più appropriato, perché?

Quando potrebbe fallire l’uno o l’altro?

È stato utile?

Soluzione

Se vuoi solo vedere se un tipo implementa una determinata interfaccia, va bene anche se GetInterface() è probabilmente più veloce poiché IsAssignableFrom() esegue più controlli interni di GetInterface().Probabilmente sarà ancora più veloce controllare i risultati di Type.GetInterfaces() che restituisce lo stesso elenco interno utilizzato comunque da entrambi gli altri metodi.

Altri suggerimenti

C'è una differenza nel modo in cui vengono gestite le classi interne.Segui la seguente lezione:

public interface IFoo
{
}    

internal class Foo: IFoo
{
}

Questo ti darà un elenco di un elemento:

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

Mentre questo ti darà un elenco vuoto:

var types = typeof(IFoo).Assembly.GetTypes()
            .Where(x => x.IsAssignableFrom(typeof(IFoo))
            .ToList();
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top