値でローカル変数をインスタンス化?
質問
これは完全に起こっていないが、なぜ
私は一種の理解します。
:私はそうのように宣言し、Shared
(Static
)変数と基本クラスを持っています
Public Shared myVar As New MyObject(arg1, arg2)
派生クラスの方法では、私はそうのようなローカル変数を設定します
Dim myLocalVar As MyObject = myVar
私はmyLocalVar.Property1 += value
ような何かをするとき、さて、Property1
の値は、そのメソッドの次の呼び出しに持続します!なぜの私はそれが起こってしまう私はを取得したとし、 myVar
は、参照することにより代わりの値によって設定されているが、私は前にこのようなことが発生したことがありません。値での myVar
を作成するために、(ちょうどmyLocalVar
のプロパティ値を使用して新しいオブジェクトを作成することです、私の回避策以外の)どのような方法がありますの
解決
あなたが
myLocalVar
を作成するときにあなたは、同じ共有オブジェクトへの新しい参照を作成しています。あなたが本当に共有インスタンスのローカルコピーをしたい場合、あなたは真のコピーを作成する必要があります。
これは、インスタンスのクローンを作成したり、インスタンスのコピーを作成することを可能にするタイプのコピーコンストラクタとのどちらかによって行われます。これは、あなたがアクセスしているプロパティは、単にその同じインスタンスへの浅いコピーの参照である場合により深いと浅いコピーやクローンまたはコピーされたインスタンス間の違いにあなたのために同様の問題を作成することができ、しかし、それは言うほど簡単ではありません元のインスタンスのプロパティを参照しています。
私はこのケースで行うための最善のことは、むしろ、オブジェクトグラフ全体をコピーするよりも、あなたが必要とする共有インスタンスの一部のみのローカルコピーを作成することです。これは、どんなタイプProperty1
のローカルコピーをで作成し、これを使用することを意味します。
所属していません StackOverflow