2010-04-30 22 views

risposta

23

Non direttamente, tuttavia è possibile utilizzare AppDomain.GetAssemblies() per ottenere tutti gli assembly attualmente caricati e quindi utilizzare Assembly.GetTypes() per ottenere tutti i tipi in tale assembly. Quindi usa Type.IsSubclassOf() per determinare se si tratta di una sottoclasse del tipo che stai cercando.

+0

Grazie. Funziona. – Polaris

+0

C'è un modo per ottenere solo gli assembly utente (al contrario degli assembly di sistema)? Se esiste un'opzione per ottenere questo assembly e tutti gli assembly referenziati (a questo) rappresentano una buona soluzione. – Shimmy

+0

Trovato: http://msdn.microsoft.com/en-us/library/system.reflection.assembly.getreferencedassemblies.aspx – Shimmy

4

è possibile selezionare l'Assemblea si desidera controllare, ottenere i tipi con il metodo Assembly.GetTypes() e il test per ciascuno di essi, se si tratta di una sottoclasse con Type.IsSubclassOf()

vedere Assembly members e Type members

19

È possibile farlo :

var subclassTypes = Assembly 
    .GetAssembly(typeof(BaseClass)) 
    .GetTypes() 
    .Where(t => t.IsSubclassOf(typeof(BaseClass))); 
3

provare questo codice:

public static IEnumerable<Type> GetAllSubclassOf(Type parent) 
{ 
    foreach (var a in AppDomain.CurrentDomain.GetAssemblies()) 
     foreach (var t in a.GetTypes()) 
      if (t.IsSubclassOf(parent)) yield return t; 
} 
Problemi correlati