1

なぜこれが起こっているのかはある程度理解できますが、完全ではありません。次のように宣言されたShared( ) 変数を持つ基本クラスがあります。Static

Public Shared myVar As New MyObject(arg1, arg2)

派生クラスのメソッドで、次のようにローカル変数を設定します。

Dim myLocalVar As MyObject = myVar

のようなことをするmyLocalVar.Property1 += valueと、値Property1はそのメソッドの次の呼び出しまで持続します! なぜそれが起こっているのかがわかると思います。myVar値ではなく参照によって設定されていますが、これまでにこのようなものに遭遇したことはありません。のプロパティ値を使用して新しいオブジェクトを作成するという私の回避策以外に、値で作成する方法はありmyVarますmyLocalVar ?

4

1 に答える 1

3

作成myLocalVarすると、同じ共有オブジェクトへの新しい参照が作成されます。共有インスタンスのローカル コピーが本当に必要な場合は、真のコピーを作成する必要があります。

これは、インスタンスを複製するか、インスタンスのコピーを作成できる型のコピー コンストラクターを使用して行います。これは思ったほど単純ではありませんが、ディープ コピーとシャロー コピーには違いがあり、アクセスしているプロパティが単にシャロー コピーされた同じインスタンスへの参照である場合、クローンまたはコピーされたインスタンスが同様の問題を引き起こす可能性があります。元のインスタンスのプロパティが参照しています。

この場合、オブジェクト グラフ全体をコピーするのではなく、共有インスタンスの必要な部分だけのローカル コピーを作成することをお勧めします。これは、どのようなタイプのローカル コピーを作成し、それをProperty1使用することを意味します。

于 2010-01-07T03:47:52.007 に答える