gpt4 book ai didi

vb.net - 如何检查变量的最终类型?

转载 作者:行者123 更新时间:2023-12-04 23:32:01 25 4
gpt4 key购买 nike

我有一个来自第三方库的 BaseClass、一个 DerivedClass1 和一个 DerivedClass2。 DerivedClass1 和 DerivedClass2 都继承自 BaseClass。

有一个ContainerClass,来自同一个库,有一个成员变量ActiveItem,它可以是DerivedClass1 或DerivedClass2,所以它被声明为BaseClass。

我想知道 ActiveItem 是否属于 DerivedClass1,因为它可以在运行时更改而不通知。

如果我做

 Dim isDerivedClass1 as boolean = TypeOf(oject.ActiveItem) Is DerivedClass1 

然后我得到一个编译时错误,告诉我 ActiveItem 永远不能是 DerivedClass1 类型。

我已经尝试了 GetType 和 TypeOf 的几种组合,但似乎无法检查这一点。我还尝试声明一个辅助 DerivedClass1 变量并比较它们的类型,但也没有任何运气。

有什么解决方法吗?
我想我可以用 Reflection 做到这一点,但似乎真的有点矫枉过正。

编辑:
以下代码无法在 vs2005 SP1 中编译。
Public Class Base
Public x As Integer
End Class
Public Class Derived1
Inherits Base
Public y As Integer
End Class
Public Class Derived2
Inherits Base
Public z As Integer
End Class
Public Class Unrelated
Public var As Base
End Class


Public Class Form1
Public Sub Test(ByVal obj As Unrelated)
Dim tst As Boolean
tst = TypeOf obj Is Derived1
End Sub

Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
Dim obj As New Unrelated
obj.var = New Derived1
Test(obj)
End Sub
End Class

编辑:
看来原来的问题是我这边的问题。我正在检查错误的类型(那些愚蠢的第三方库......)
但是,我仍在尝试在上面的代码中找到错误。

编辑:
又是我的错。我正在查看 无关 键入反对 底座 .

最佳答案

您的代码似乎几乎完全正确。

我已经这样做了,效果很好:

Dim isDerivedClass1 As Boolean = TypeOf oject.ActiveItem Is DerivedClass1
Dim isDerivedClass2 As Boolean = TypeOf oject.ActiveItem Is DerivedClass2

我错过了什么吗?

编辑:我想你只是错过了 var您编辑的代码中的属性。
Public Sub Test(ByVal obj As Unrelated)
Dim tst As Boolean
tst = TypeOf obj.var Is Derived1
End Sub

关于vb.net - 如何检查变量的最终类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3650371/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com