XN1*_*N16 8 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
Run Code Online (Sandbox Code Playgroud)
以下确实有效,但在我看来并不是很优雅.此外,创建的继承级别越多,需要完成的检查越多,并且很容易忘记这段代码需要更新.
If GetType(T) Is GetType(Domain) OrElse _
GetType(T).BaseType Is GetType(Domain) OrElse _
GetType(T).BaseType.BaseType Is GetType(Domain) Then
End If
Run Code Online (Sandbox Code Playgroud)
有没有办法在T的继承层次结构中获得"域类型"?
(C#或VB.NET欢迎回答)
UPDATE
由于我自己的白痴,我错过了一点重要的信息!
T是一个Type对象(来自类'泛型类型)
Dan*_*zey 25
您可以使用该Type.IsAssignableFrom方法.
在VB中:
If GetType(Domain).IsAssignableFrom(GetType(DerivedThree)) Then
Run Code Online (Sandbox Code Playgroud)
在C#中:
if (typeof(Domain).IsAssignableFrom(typeof(DerivedThree)))
Run Code Online (Sandbox Code Playgroud)
为什么没人提及Type.IsSubclassOf(Type)?
https://learn.microsoft.com/en-us/dotnet/api/system.type.issubclassof?view=netframework-4.7.2
小心,如果调用两个相等的类型,它会返回 false;)