各行を見てみましょう:
myObject bob; // Creates a variable of type myObject, but it doesn't point anywhere
bob = new myObject(); // bob now points to a newly created myObject instance
myObject joe; // Creates a variable of type myObject, but it doesn't point anywhere
joe = bob; // joe now refers to the same object as bob
覚えておくべき重要なことは、最後の行が参照自体の値をコピーすることです。bob
1000番地を指す場合などは、joe
そこも指します。したがって、このアドレスのデータを変更joe
すると、との両方bob
が同じデータを指します。
ただし、他の場所を指すように設定joe
しても問題ありません。影響はありません。言い換えると:bob
joe = null; // This will not null out bob
のまったく新しいインスタンスを作成する場合はmyObject
、次のようにする必要があります。
joe = new myObject(); // This will also not affect bob
myObject
ここで、メモリ内の新しいインスタンスを作成し、既存のインスタンスのすべてのプロパティをコピーしようとしている場合は、自分でこれを行う必要があります。
joe = new myObject();
joe.X = bob.X; // Assuming X is not a reference itself
joe.Y = bob.Y; // ...or you'd have to do this recursively
.NET では、このコピーを行う方法は提供されていません。1 つの一般的なパターンはmyObject()
、 のインスタンスを取り、myObject
そのすべてのプロパティをコピーするコンストラクターを作成することです。
joe = new myObject(bob);