2017-03-03 6 views
-4

派生クラスメソッドでオブジェクトを作成して基本クラスメンバをインスタンス化しようとすると、代わりにc.Idがアクセスする必要がある派生クラスでオブジェクトを作成して基本クラスメンバをインスタンス化する方法

public class RetailCust : Customer 
{ 
    public void Print() 
    { 
     Customer c = new Customer(); 
     c.id=102 //getting an error 
    } 
} 

public class Customer 
{ 
    protected int id = 100; 
} 
+1

なぜ、「顧客」の新しいインスタンスを作成していますか? 'RetailCust'は' id'への通常のアクセス権を持っています – UnholySheep

+1

'c.id = 102'は' this.id = 102; 'または' base.id = 102; ' – Igor

+0

でなければなりません。エラースタックを投稿してください。 – JuanR

答えて

1

クラスから派生すると、親のメンバーprotectedにアクセスできます。しかし、親クラスのインスタンスを作成しても、そのインスタンスのメンバーはprivateまたはprotectedにはアクセスできません。基本的には、他のクラスと同様に、想像することができます。

public class RetailCust : Customer 
{ 
    public void Print() 
    { 
    this.id = 102; 
    } 
} 

それが設定されているあなたが何をしようとしている現在のRetailCustオブジェクトが持っているように見えるように、印刷の内側Customerオブジェクトをインスタンス化する必要はありません:

1

は、私が何をしたいと思うことはあると思います102のID?

編集/更新:Customerオブジェクトをインスタンス化する理由はありませんなぜ の理由は、あなたがCustomerオブジェクト(RetailCustのちょうどより具体的なタイプ)されていることです。だからCustomerクラスの持つプロパティを参照するには、thisまたはbaseを使用します(オーバーライドして、これとベースを区別したい場合)。

+0

'c.id'は何も参照していません(コンパイルされません) – UnholySheep

+0

申し訳ありませんが、私はこれに変更しました。それはコンパイルする必要があります。 –

関連する問題