参照型は「オブジェクト ID」を保持していると考えてください。また、「someReference.DoSomething()」という式は、「ID が_ _ であるオブジェクトを見つけて、それに対して DoSomething() メソッドを実行する」という意味であると考えてください。「reference1 = reference2」のようなステートメントは、reference2 に格納されているオブジェクト ID を reference1 にコピーすることを示しています。最初のステートメントは変更しないことに注意してくださいsomeReference
。実行前に「object id #8675309」を保持していた場合、実行後も保持し続けます。さらに、2 番目のステートメントは によって参照されるオブジェクトを変更せず、 によって参照されていたオブジェクトも変更しないことに注意してreference1
くださいreference2
。
.NET 言語のオブジェクト参照で実際にできることはほとんどありません。参照型のメンバーを含むもの [例myCar.Color = Blue;
] は、参照型の格納場所には作用しませんが、その場所に ID が格納されているオブジェクトに作用します。
値型は参照型とは異なる動作をすることに注意することが重要です。プリミティブ値型 ( などInt32
) の格納場所には、実際に値が保持されます。構造型 (例: ) の格納場所には、その型のDrawing.Point
すべてのインスタンス フィールド (パブリック、内部、またはプライベート) が保持されます。ある値型の格納場所を別の場所にコピーすると、コピー先のすべてのフィールドが最初の値から取得された値で上書きされ、値型のメンバーにアクセスすると、実際にはそこに格納されているフィールドにアクセスします。
次のようなコードを書くことが許されるのは悪いことだと考える人もいます。
Point myPoints[1000];
myPoints[0] = startPosition;
myPoints[1] = startPosition;
myPoints[0].X += 4;
これにより、データの一部が変更されますがmyPoint[0]
、他のすべてのコピーは変更startPosition
されません。このような動作は、クラス オブジェクトの動作とは大きく異なり、注意が必要ですが、それ自体が非常に便利な場合もあります。