object
オブジェクトを保持するのではなく、「オブジェクト ID」を保持するものとして、各クラス型の格納場所 (型の変数またはその他のクラス型がそのように修飾されます) を考えると役立つ場合があります[「参照」という用語には多くの意味があります。 ; 「オブジェクトID」という用語は、そのあいまいさを回避します]。多くの .net 言語では、オブジェクト ID でできることはあまりありませんが、ID によって参照されるオブジェクトでやりたいことが無数にある.
ため、オブジェクト ID に演算子を適用するとメンバーにアクセスします。その ID によって参照されるオブジェクトの。
オブジェクト ID にはテキスト表現がないことに注意してください。ただし、概念的には、オブジェクト ID に任意の番号を割り当てると便利な場合があります。はクラスCar
型であり、FordFocus
はそれから派生したクラス型であるとします。ステートメント
Car Fred = new FordFocus();
未使用のオブジェクト ID を選択し (たとえば、#42 を選択するとします)、その ID を持つ FordFocus クラスの新しいインスタンスを生成し、その ID を に格納しますFred
。のインスタンスも のインスタンスもFred
保持できないことに注意してください。代わりに、それが保持できるのはオブジェクト ID だけです。それが何かを識別する場合、いずれかのインスタンスまたはそれから派生したクラスを識別することが保証されます。この特定のシナリオでは、#42 を保持しています。コードが次のように言う場合:FordFocus
Car
Car
Object Barney = Fred;
このコードは、Fred に格納される可能性のあるオブジェクト ID を Barney に安全に格納できるかどうかを確認し、格納できると判断して、Barney を #42 に設定します。
コードが言う場合
Fred.Color = Blue;
コードは実際には影響しませんがFred
(ステートメントの前に "#42" を保持し、その後も "#42" を保持し続けます)、オブジェクト #42 に影響を与え、青い車に変えます。
その時点で、コードが次のようになっている場合:
Fred = new HyundaiSonata();
システムは新しい ID (例: #57) を生成し、その ID を使用して HyundaiSonata のインスタンスを作成し、#57 を Fred に格納します。このステートメントは Fred の値を上書きします (以前は #42 を保持していましたが、現在は #57 を保持しています) が、Object #42 (まだ青い FordFocus である) には影響しません。