使用VB.Net设置类中的共享对象属性
问题描述:
如果我有一个具有共享属性的类,并且属性值是在类过程(子/函数)之外创建的新对象实例,我还可以设置属性该过程之外的共享对象?使用VB.Net设置类中的共享对象属性
Public Class Person
Private Shared DataItem = New DataItem
DataItem.Value = 10 ' Assuming Value is a Public Property
End Class
我想在其他语言,比如Java,你可以创建一个静态块运行和设置静态值:静态{}
不知道,如果你能做到这一点在VB虽然...
编辑:基本上在Java中找到的静态初始化器的VB等价物。似乎无法找到关于此的任何信息。
答
是的,你可以。如果您希望在Person
类之外访问您的DataItem变量,则需要对代码进行一些更改。您需要将Private Shared DataItem
更改为Public Shared DataItem
或Friend 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
,如果你想要共享的方法在父类,你可以这样做:在这里
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:
- 共享构造函数在类类型的任何实例创建之前运行。
- 共享构造函数在结构类型的任何实例成员被访问之前,或者在显式调用任何结构类型的构造函数之前运行。调用为结构创建的隐式参数less构造函数不会导致共享构造函数运行。
- 在引用任何类型的共享成员之前运行共享构造函数。
- 共享构造函数在加载从类型派生的任何类型之前运行。
- 共享构造函数在程序的单次执行过程中不会运行多次。
它只需要通过Person实例在类内部访问。该值在Person的所有实例中需要相同。问题是DataItem的属性需要设置,不应该在Person类函数中完成。 我可以让它公开但不确定为什么它是需要的。 – Mayron
我主要想知道是否有一种设置子/函数之外共享属性的等效方式,就像C#和Java所能做的那样。我认为它被称为静态初始化程序:https://*.com/questions/335311/static-initializer-in-java – Mayron
谢谢。我刚刚发现这个:https://msdn.microsoft.com/en-us/library/aa711965(v=vs.71).aspx 这正是我想要的,因为没有人的实例需要创建之前我可以开始将属性值添加到DataItem。 – Mayron