2017-05-26 60 views
1

如果我有一个具有共享属性的类,并且属性值是在类过程(子/函数)之外创建的新对象实例,我还可以设置属性该过程之外的共享对象?使用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等价物。似乎无法找到关于此的任何信息。

回答

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 

,如果你想要共享的方法在父类,你可以这样做:在这里

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. 共享构造函数在类类型的任何实例创建之前运行。
  2. 共享构造函数在结构类型的任何实例成员被访问之前,或者在显式调用任何结构类型的构造函数之前运行。调用为结构创建的隐式参数less构造函数不会导致共享构造函数运行。
  3. 在引用任何类型的共享成员之前运行共享构造函数。
  4. 共享构造函数在加载从类型派生的任何类型之前运行。
  5. 共享构造函数在程序的单次执行过程中不会运行多次。
+0

它只需要通过Person实例在类内部访问。该值在Person的所有实例中需要相同。问题是DataItem的属性需要设置,不应该在Person类函数中完成。 我可以让它公开但不确定为什么它是需要的。 – Mayron

+0

我主要想知道是否有一种设置子/函数之外共享属性的等效方式,就像C#和Java所能做的那样。我认为它被称为静态初始化程序:https://stackoverflow.com/questions/335311/static-initializer-in-java – Mayron

+1

谢谢。我刚刚发现这个:https://msdn.microsoft.com/en-us/library/aa711965(v=vs.71).aspx 这正是我想要的,因为没有人的实例需要创建之前我可以开始将属性值添加到DataItem。 – Mayron