2009-08-11 1 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 
    } 
} 

Как вы можете видеть, я не могу получить доступ к членам A с помощью base в C. Как можно Я обращаюсь к нему? Спасибо :)

ответ

6

Если вы защищены Foo,

class A 
{ 
    protected int foo; 
} 

тогда простая база будет делать:

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

Но было бы лучше построить свойство (защищенный) вокруг обув:

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

Большое спасибо, я просто забыл. :) Извините за задание таких основных вопросов, это было давно, поскольку я последний раз закодирован на C#. – Lazlo

+2

@ Lazlo - Вы не должны извиняться, вот для чего этот сайт. –

2

Публиковать перед int foo;

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 объявляется частным. Он должен быть защищен для производных классов для доступа к нему.