加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-17 07:16:51 所属栏目:百科 来源:网络整理
导读:我有一个BaseClass,一个DerivedClass1和一个来自第三方库的DerivedClass2. DerivedClass1和DerivedClass2都从BaseClass继承. 有一个来自同一个库的ContainerClass,它有一个成员变量ActiveItem,它可以是DerivedClass1或DerivedClass2,所以它被声明为BaseClass
我有一个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变量并比较它们的类型,但也没有任何运气.

有没有解决方法?
我想我可以用反射来做,但看起来真的有点矫枉过正.

编辑:
以下代码无法在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

编辑:
似乎原来的问题是我身边的错.我正在检查错误的类型(那些愚蠢的第三部分库……)
但是,我仍然试图在上面的代码中找到错误.

编辑:
再次,我的错.我正在检查Base的Unrelated类型.

解决方法

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

我做到了这一点,工作正常:

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读