为什么允许引用Windows窗体的非共享成员?

时间:2016-02-08 17:36:23

标签: .net vb.net

我们在代码中确定问题时遇到了这个问题。我们已经修复了这个错误,但问题仍然存在:

为什么允许引用“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没有。为什么呢?

1 个答案:

答案 0 :(得分:2)

这是许多Visual Basic.NET兼容性功能之一。

当您在旧式Visual Basic中按类型引用表单时,您将获得对该表单的默认实例的引用。这就是过去VB开发的方式(而且VB并不是使用这种约定的唯一环境)。大多数情况下,每个表单实际上只有一个实例。

由于您没有故意利用此功能,因此您可能从未实际使用过默认实例,而是根据需要创建自己的实例。在这种情况下,Form1.NotSharedProperty将只返回默认值。