使用VB.Net

时间:2017-05-26 11:25:11

标签: vb.net shared

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

Public Class Person

    Private Shared DataItem = New DataItem

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

End Class

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

不确定你是否可以在VB中做到这一点......

编辑:基本上是VB中的静态初始化器的VB等价物。似乎无法找到任何相关信息。

1 个答案:

答案 0 :(得分:2)

是的,你可以。如果希望在Person类之外访问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方法,你可以这样做:

Public Class Person
    Private Shared DataItem = New DataItem

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

此处更详细,https://ocaml.org/learn/tutorials/99problems.html。 来自MSDN:

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