列出对象的所有具体或抽象类

发布于 2024-08-13 15:14:23 字数 150 浏览 4 评论 0原文

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

  1. Tiger
  2. Cat
  3. Animal
  4. Object

Is it possible in C#, via reflection or some other method, to return a list all superclasses (concrete and abstract, mostly interested in concrete classes) of an object. For example passing in a "Tiger" class would return:

  1. Tiger
  2. Cat
  3. Animal
  4. Object

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

橘寄 2024-08-20 15:14:23
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 属性轻松处理抽象类。

static void VisitTypeHierarchy(Type type, Action<Type> action) {
    if (type == null) return;
    action(type);
    VisitTypeHierarchy(type.BaseType, action);
}

Example:

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

You can easily deal with abstract classes by using the Type.IsAbstract property.

遗弃M 2024-08-20 15:14:23

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

Sure, use the "GetType()" method to get the type of the provided object. Each Type instance has a "BaseType" property which provides the directly inherited type. You can just recursively follow the types until you find a Type with a null BaseType (ie Object)

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文