2017-05-26 4 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でそれを行うことができれば、静的{}

がわかりません...

EDIT:基本的に、Javaで見つかった静的初期化子のVBに相当します。これに関する情報を見つけることができないようです。

答えて

2

はいできます。 DataItem変数をPersonクラスの外部からアクセスできるようにするには、コードをいくつか変更する必要があります。 Private Shared DataItemPublic 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:

  1. 共有コンストラクタは、クラス型のインスタンスが作成される前に実行されます。
  2. 共有コンストラクタは、構造体型のインスタンスメンバーにアクセスする前、または構造体型のコンストラクタが明示的に呼び出される前に実行されます。構造体用に作成された暗黙的なパラメータの少ないコンストラクタを呼び出すことで、共有コンストラクタは実行されません。
  3. 共有コンストラクタは、型の共有メンバのいずれかが参照される前に実行されます。
  4. 共有コンストラクタは、型から派生した型がロードされる前に実行されます。
  5. 共有コンストラクタは、プログラムの1回の実行中に複数回実行されることはありません。
+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

関連する問題