从基类获取Child类

时间:2010-04-30 07:31:11

标签: c# class

C#中是否可以从基类中获取子类的类型?

5 个答案:

答案 0 :(得分:27)

你可以这样做:

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

答案 1 :(得分:25)

不是直接的,但是您可以使用AppDomain.GetAssemblies()来获取所有当前加载的程序集,然后使用Assembly.GetTypes()来获取该程序集中的所有类型。然后使用Type.IsSubclassOf()确定它是否是您所追求的类型的子类。

答案 2 :(得分:5)

您可以选择要检查的程序集,使用方法Assembly.GetTypes()获取类型,如果它是具有Type.IsSubclassOf()

的子类,则测试每个类型

请参阅Assembly membersType members

答案 3 :(得分:3)

试试这段代码:

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;
}

答案 4 :(得分:0)

请参阅以下示例代码,该示例代码与其他代码相似,不同之处在于它不使用lambda表达式和扩展方法,并在Microsoft Visual Studio 2017控制台应用程序中使用特定类进行了测试。

有关更多详细信息,请参见其注释,输出和屏幕截图。

C#

// Get all the types in your assembly. For testing purpose, I am using Aspose.3D, you can use any.
var allTypes = Assembly.GetAssembly(typeof(Aspose.ThreeD.Formats.SaveOptions)).GetTypes();

foreach(var myType in allTypes)
{
    // Check if this type is subclass of your base class
    bool isSubType = myType.IsSubclassOf(typeof(Aspose.ThreeD.Formats.SaveOptions));

    // If it is sub-type, then print its name in Debug window.
    if (isSubType)
    {
        System.Diagnostics.Debug.WriteLine(myType.Name);
    }
}

输出

AMFSaveOptions
ColladaSaveOptions
Discreet3DSSaveOptions
DracoSaveOptions
FBXSaveOptions
GLTFSaveOptions
HTML5SaveOptions
ObjSaveOptions
PdfSaveOptions
PlySaveOptions
RvmSaveOptions
STLSaveOptions
U3DSaveOptions

屏幕截图 Get sub-types from base-type with System.Reflection