学习VB.NET时,你可能会遇到VB.NET共享成员问题,这里将介绍VB.NET共享成员问题的解决方法,在这里拿出来和大家分享一下实例访问VB.NET共享成员。
大家都知道静态成员在VB中叫做共享成员,虽然刚接受起来有点别扭,但“VB.NET共享成员”的确是名副其实的:
- Public Class Class1
- Public Shared i As Integer
- 'Other none-shared members
- End Class
不但像在C#中那样,可以用Class1.i访问VB.NET共享成员i,还可以用实例变量来访问:
- Dim c1 As New Class1
- c1.i = 100
就像i是c1的成员一样!当然只有一个i,任何实例去修改i的值都将导致所有i的值改变(因为其实只有一个)。甚至Me和MyClass也可以访问VB.NET共享成员。
- Me.i = 100
- MyClass.i = 100
这在C#中是不可能做到的,一个纯正的C#程序员看到这些代码一定会觉得匪夷所思。为了揭示它的工作原理,我们可以做下列实验:
- Dim c1 As Class1
- c1.i = 100
注意,这里的c1为Nothing!,即使是Nothing的变量也可以访问VB.NET共享成员,而且不会出错。接下来我们实验更极端的情况:
- Dim o As Object = New Class1
- o.i = 100
结果——失败,不能通过后期绑定访问VB.NET共享成员。现在结果已经很明显,只有在VB明确了解对象类型的情况下,才能使用实例访问VB.NET共享成员,VB会自动判断类型,然后将所有对共享成员访问的语句改写成
- Class1.i = 100
这样的语法。Delphi也支持这一有趣的特征,而且李维在《Inside VCL》中将此说成Delphi.NET相对于.NET的扩展之一。
【编辑推荐】