【问题标题】:List all concrete or abstract classes of object列出对象的所有具体或抽象类
【发布时间】:2025-11-23 08:45:02
【问题描述】:

是否可以在 C# 中通过反射或其他方法返回对象的所有超类(具体和抽象,主要对具体类感兴趣)的列表。例如传入“Tiger”类将返回:

  1. 老虎
  2. 动物
  3. 对象

【问题讨论】:

  • Reflector 包含一个方便的“基类型”节点,您可以使用该节点深入了解类型的接口和基类。

标签: c# reflection superclass


【解决方案1】:
static void VisitTypeHierarchy(Type type, Action<Type> action) {
    if (type == null) return;
    action(type);
    VisitTypeHierarchy(type.BaseType, action);
}

例子:

VisitTypeHierarchy(typeof(MyType), t => Console.WriteLine(t.Name));

您可以使用Type.IsAbstract 属性轻松处理抽象类。

【讨论】:

  • 多么简单的答案,但正是我想要的。谢谢!
【解决方案2】:

当然,使用“GetType()”方法获取所提供对象的类型。每个 Type 实例都有一个“BaseType”属性,它提供直接继承的类型。您可以递归地跟踪类型,直到找到具有 null BaseType 的类型(即对象)

【讨论】: