4
class Base
    {
        //...
        public int i = 5;
    }

class Drifted : Base
{
    //...
    public int b = 10;
}

Base ObjectOrReference = new Drifted();

基本Base ObjectOrReference;型への参照も同様です。Base ObjectOrReference = new Drifted();「new」を使用してメモリを割り当てるため、書き込むとオブジェクトになりますか?または、まだ参照しており、それが真の場合、どの型を持っていますか? 直接的な質問は、「ObjectOrReferenceオブジェクトですか?」です。

4

5 に答える 5

12

それはまだ参照であり、ヒープ上のオブジェクトへのポインタです。タイプDriftedです。

参照がBaseタイプである場合でも、基になるオブジェクトはDriftedであり、派生クラスのオーバーライドされたメンバーは、を使用しようとしても、Drifted上のメンバーの代わりに使用されます。BaseBase

構文を使用してメンバーを非表示にする場合new、基本タイプへの参照があると、メンバーを非表示にしている派生クラスがバイパスされます。

概要は、「C#参照型」のグーグルでオンラインで見つけることができます。私はこれをざっと読みました、読む価値があるように見えます:

http://www.albahari.com/valuevsreftypes.aspx

于 2011-05-17T13:27:18.637 に答える
7
Base ObjectOrReference = new Drifted();

これで、Driftedインスタンスが作成されましたが、Base参照変数によって参照されますObjectOrReference。現在、その機能は で利用可能な機能に制限されていますBase。必要に応じて、 accessint bDriftedにキャストする必要があります。Drifted

于 2011-05-17T13:28:17.147 に答える
7

はい、ObjectOrReferenceオブジェクトであり、有効なオブジェクトです。

DriftedTypeのオブジェクトです。オブジェクト指向プログラミングの基本概念であり、基本クラスのポインタ/参照(ObjectOrReferenceあなたの場合)はその派生クラス(Driftedあなたの場合)のオブジェクトを保持/参照できるため、エラーではなく、Driftedタイプの有効なオブジェクトです

于 2011-05-17T13:31:17.713 に答える
6

いつも参考になります。オブジェクト変数をポインター/参照と考えてください。実際のオブジェクトの作成/割り当てはヒープで行われますが、参照はローカル スタック スペースで作成されます。

于 2011-05-17T13:28:19.163 に答える
1

派生クラスのオブジェクトをインスタンス化しましたが、基本クラスの参照型 (ObjectOrReference) を介してそのメモリ位置を参照しています。オブジェクト参照は、その型のメンバーのみを認識し (つまり、基本クラス内で)、派生クラスのメンバーについてはまったく認識しません。したがって、派生クラスのメンバーにアクセスすることはできず、継承について話しているため、ここでキャストを入力することはできません

于 2012-07-13T10:24:06.573 に答える