我们在代码中确定问题时遇到了这个问题。我们已经修复了这个错误,但问题仍然存在:
为什么允许引用“Windows窗体”的非共享成员?
为了复制行为,创建新的Windows窗体应用程序(我使用的是VS2012,.net4.0),填充默认窗体Form1.vb,其中包含:
Option Strict On
Option Explicit On
Public Class Form1
Private _private As String
Public ReadOnly Property NotSharedProperty As String
Get
Return _private
End Get
End Property
End Class
然后添加一个新类并将其命名为PropertClass,填入:
Option Strict On
Option Explicit On
Public Class ProperClass
Private _private As String
Public ReadOnly Property NotSharedProperty As String
Get
Return _private
End Get
End Property
End Class
然后添加另一个类,将其命名为ExampleClass并填充它:
Option Strict On
Option Explicit On
Public Class ExampleClass
Public Sub New()
If Form1.NotSharedProperty Is Nothing Then
'.....................
End If
If ProperClass.NotSharedProperty Is Nothing Then
'.....................
End If
End Sub
End Class
在ExampleClass中,ProperClass.NotSharedProperty
给了我“对非共享成员的引用需要一个对象引用。”正如人们所料。 Form1.NotSharedProperty
没有。为什么呢?
答案 0 :(得分:2)
这是许多Visual Basic.NET兼容性功能之一。
当您在旧式Visual Basic中按类型引用表单时,您将获得对该表单的默认实例的引用。这就是过去VB开发的方式(而且VB并不是使用这种约定的唯一环境)。大多数情况下,每个表单实际上只有一个实例。
由于您没有故意利用此功能,因此您可能从未实际使用过默认实例,而是根据需要创建自己的实例。在这种情况下,Form1.NotSharedProperty
将只返回默认值。