2008-09-19 6 views

Respuesta

11

Si solo quiere ver si un tipo implementa una interfaz determinada, cualquiera está bien, aunque GetInterface() es probablemente más rápido ya que IsAssignableFrom() realiza más comprobaciones internas que GetInterface(). Probablemente sea incluso más rápido comprobar los resultados de Type.GetInterfaces() que devuelve la misma lista interna que utilizan los otros métodos de todos modos.

1

Existe una diferencia en cómo se manejan las clases internas. Tomar la clase siguiente:

public interface IFoo 
{ 
}  

internal class Foo: IFoo 
{ 
} 

esto le dará una lista de un solo elemento:

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

Mientras que esto le dará una lista vacía:

var types = typeof(IFoo).Assembly.GetTypes() 
      .Where(x => x.IsAssignableFrom(typeof(IFoo)) 
      .ToList(); 
Cuestiones relacionadas