with what net method done create c# .net reflection

what - propertyinfo c#



¿Cuál es la diferencia entre IsAssignableFrom y GetInterface? (2)

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

public interface IFoo { } internal class Foo: IFoo { }

Esto le dará una lista de un artículo:

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();

Usando la reflexión en .Net, ¿cuál es la diferencia entre:

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

Y

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

¿Cuál es más apropiado? ¿Por qué?

¿Cuándo pueden fallar uno u otro?


Si solo quiere ver si un tipo implementa una interfaz dada, 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.