2009-08-11 10 views
2

は私の現在のレイアウトである:(質問はコメントです)アクセス部材(継承)

class A 
{ 
    int foo; 
} 

class B : A {} 

class C : B 
{ 
    void bar() 
    { 
     //I want to access foo 
     base.foo; // Doesn't work 
     base.base.foo // Doesn't work, of course 
    } 
} 

あなたが見ることができるようにどのようにできた、私はCでbaseを使用してAのメンバーにアクセスすることはできません私はそれにアクセスしますか?

void bar() 
    { 
     //I want to access foo 
     base.foo; // will work now 
     // base.base.foo // Doesn't work, of course 
    } 

しかし、fooの周り(保護)プロパティを構築する方が良いでしょう:感謝:)

答えて

6

あなたはfooが保護させる場合は、

class A 
{ 
    protected int foo; 
} 

は、単純なベースが行います

class A 
    { 
     private int _foo; 
     protected int Foo 
     { 
      get { return _foo; } 
      set { _foo = value; } 
     } 
    } 
+0

ありがとう、私は単に忘れてしまった。 :)基本的な質問をして申し訳ありませんが、私はC#で最後にコード化されてから長いです。 – Lazlo

+2

@Lazlo - あなたは謝罪すべきではありません、それはこのサイトの目的です。 –

2

int fooの前にpublicを指定します。

class A 
{ 
    public int foo; 
} 

class B : A {} 

class C : B 
{ 
    void bar() 
    { 
     //I want to access foo 
     base.foo; // Now you can see it 
    } 
} 

デフォルトでは、特に指定しない限り、すべてのメンバーは非公開です。

3

Aのフィールドはprivateと宣言されています。派生クラスがアクセスするには保護されている必要があります。