12

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

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

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 对象(来自类的泛型)

4

3 回答 3

26

您可以使用该Type.IsAssignableFrom方法。

在 VB 中:

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

在 C# 中:

if (typeof(Domain).IsAssignableFrom(typeof(DerivedThree)))
于 2013-05-31T14:42:46.803 回答
6

为什么没人提Type.IsSubclassOf(Type)

https://docs.microsoft.com/en-us/dotnet/api/system.type.issubclassof?view=netframework-4.7.2

小心,如果调用两个相等的类型,它会返回 false;)

于 2018-09-20T17:04:20.857 回答
-3

运营商怎么样?

if(obj is Domain)
{
    // 
}
于 2013-05-31T14:36:02.057 回答