使用 VB.Net 在 class 内设置共享对象属性

Setting shared object properties inside class using VB.Net

如果我有一个带有共享 属性 的 class,并且属性值是在 class 过程之外创建的新对象实例 (sub/function),我还可以在过程之外设置该共享对象的属性吗?

Public Class Person

    Private Shared DataItem = New DataItem

    DataItem.Value = 10 ' Assuming Value is a Public Property

End Class

我认为在其他语言中,例如 Java,您可以为 运行 创建一个静态块并设置静态值:static {}

但不确定 VB 中是否可以...

编辑:基本上 VB 等同于 Java 中的静态初始值设定项。似乎找不到这方面的任何信息。

是的,你可以。如果您希望可以在 Person class 之外访问您的 DataItem 变量,则需要对您的代码进行一些更改。您需要将 Private Shared DataItem 更改为 Public Shared DataItemFriend Shared DataItem。如果您想限制阅读或写作的可访问性,您可以使用 Person 中的方法来授予对特定字段的访问权限。例如:

Public Class Person

    Private Shared DataItem = New DataItem


    Public Sub SetVariable(ByVal value As Int)
        DataItem.Value = value
    End Sub

End Class

如果你想在父级上使用 Shared 方法 class 你可以这样做:

Public Class Person
    Private Shared DataItem = New DataItem

    Shared Sub New()
        DataItem = New DataItem()
    End Sub
End Class

此处有更多详细信息,https://msdn.microsoft.com/en-us/library/aa711965(VS.71).aspx。 来自 MSDN:

  1. 共享构造函数 运行 在创建 class 类型的任何实例之前。
  2. 共享构造函数 运行 在访问结构类型的任何实例成员之前,或在显式调用结构类型的任何构造函数之前。调用为结构创建的隐式参数less构造函数不会导致共享构造函数运行.
  3. 共享构造函数 运行 在任何类型的共享成员被引用之前。
  4. 共享构造函数 运行 在加载派生自该类型的任何类型之前。
  5. 共享构造函数在程序的单次执行期间不会 运行 多次。