c# - 如何判断一个类型是否在继承层次中

标签 c# vb.net inheritance

我需要确定一个对象在其继承层次结构中是否具有特定类型,但是我找不到执行此操作的好方法。

我的类的一个非常基本的示例版本是:

Public Class Domain

End Class

Public Class DerivedOne
    Inherits Domain

End Class

Public Class DerivedTwo
    Inherits DerivedOne

End Class

Public Class DerivedThree
    Inherits Domain

End Class

以下确实有效,但我认为它不是很优雅。此外,创建的继承级别越多,需要进行的检查就越多,并且很容易忘记需要更新这段代码。

If GetType(T) Is GetType(Domain) OrElse _
    GetType(T).BaseType Is GetType(Domain) OrElse _
    GetType(T).BaseType.BaseType Is GetType(Domain) Then

End If

有没有办法得到“域的类型在 T 的继承层次结构中的任何位置”?

(欢迎使用 C# 或 VB.NET 回答)


更新

由于我自己的愚蠢,我错过了一点重要信息!

T 是一个 Type 对象(来自类的泛型类型)

最佳答案

您可以使用 Type.IsAssignableFrom方法。

在 VB 中:

If GetType(Domain).IsAssignableFrom(GetType(DerivedThree)) Then

在 C# 中:

if (typeof(Domain).IsAssignableFrom(typeof(DerivedThree)))

关于c# - 如何判断一个类型是否在继承层次中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16859728/

相关文章:

c# - 什么是 TypeAttributes.NotPublic?

asp.net - VB.Net Web 方法给出 HTTP401 未授权错误

Swift 不接受泛型特化作为返回类型

c# - 在 linq c# 中使用 left 和 charindex

c# - 是否可以在配置中定义一个变量?

vb.net - 如何在 Visual Basic 中为一个单词的多个实例着色

c# - 离开屏幕保护程序或锁定计算机后程序挂起

python - Python 中文件解析器的包装或继承

c# - 从类继承

c# - 我可以跟踪 ConfigurationManager 设置的使用吗