[C#] Wie finden Sie alle Typen in einer Assembly, die von einem bestimmten Typ C # erben?


Answers

Die folgende Methode ruft eine Auflistung von Typen ab, die einen Typ erben.

C #

public IEnumerable<Type> FindSubClassesOf<TBaseType>()
{   
    var baseType = typeof(TBaseType);
    var assembly = baseType.Assembly;

    return assembly.GetTypes().Where(t => t.IsSubclassOf(baseType));
}

VB.NET

Public Function FindSubClasses(Of TBaseType)() As IEnumerable(Of Type)

    Dim baseType = GetType(TBaseType)
    Dim assembly = baseType.Assembly

    Return From t In assembly.GetTypes() 
           Where t.IsSubClassOf(baseType) 
           Select t

End Function

Wenn Sie Typen hinzufügen müssen, die eine Schnittstelle implementieren, lesen Sie die Antwort von @Jon Skeet.

Question

Wie erhalten Sie eine Sammlung aller Typen, die von einem bestimmten anderen Typ erben?




Erwägen Sie die Verwendung dieser Methode (für eine PCL geschrieben):

public IEnumerable<Type> FindDerivedTypes( Assembly assembly, Type baseType )
{
        TypeInfo baseTypeInfo = baseType.GetTypeInfo();
        bool isClass = baseTypeInfo.IsClass, isInterface = baseTypeInfo.IsInterface;

        return
            from type in assembly.DefinedTypes
            where isClass ? type.IsSubclassOf( baseType ) :
                  isInterface ? type.ImplementedInterfaces.Contains( baseTypeInfo.AsType() ) : false
            select type.AsType();
}