2012-01-19 8 views

Respuesta

62

Puede cargar todos los tipos en el Ensamblaje y luego enumerarlos para ver cuáles implementan el tipo de su objeto. Dijo 'objeto', por lo que la muestra de código siguiente no es para interfaces. Además, este ejemplo de código sólo se busca en la misma Asamblea que el objeto fue declarado en.

class A 
{} 
... 
typeof(A).Assembly.GetTypes().Where(type => type.IsSubclassOf(typeof(A))); 

O como se sugiere en los comentarios, utilizar este código de ejemplo para buscar a través de todos los ensamblados cargados.

var subclasses = 
from assembly in AppDomain.CurrentDomain.GetAssemblies() 
    from type in assembly.GetTypes() 
    where type.IsSubclassOf(typeof(A)) 
    select type 

Ambos ejemplos de código requieren que usted agregue using System.Linq; interfaces de

+1

Para hacer lo mismo para una interfaz en lugar de un objeto/clase, cambie la línea en la que ' donde typeof (IMyInterface) .IsAssignableFrom (type) && type.IsClass' ([pregunta original] (http://stackoverflow.com/questions/26733/getting-all-types-the-implement-an-interface-with-c -sharp-3-0)). – jtpereyda

9

subclases del significado? Sí:

this.GetType().GetInterfaces() 

Subclases que significan los tipos de base? Bueno, C# solo puede tener una clase base

Subclases que significa todas las clases que heredan de su clase? Sí:

EDIT: (vcsjones gracias)

foreach(var asm in AppDomain.CurrentDomain.GetAssemblies()) 
{ 
     foreach (var type in asm.GetTypes()) 
     { 
      if (type.BaseType == this.GetType()) 
       yield return type; 
     } 
} 

Y hacerlo para todos los ensamblados cargados

+6

"Subclases que significan interfaces" - lo siento, pero esto no tiene sentido – BartoszKP

Cuestiones relacionadas