Доступ к члену второго родителя (наследование) - PullRequest
2 голосов
/ 12 августа 2009

Вот мой текущий макет: (вопрос к комментарию)

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. Как я могу получить к нему доступ? Спасибо:)

Ответы [ 3 ]

6 голосов
/ 12 августа 2009

Если вы делаете 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
  }

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

   class A
   {  
        private int _foo;  
        protected int Foo 
        {
           get { return _foo; }
           set { _foo = value; }
        }
   }
3 голосов
/ 12 августа 2009

Поле в A объявлено закрытым. Он должен быть защищен для производных классов для доступа к нему.

2 голосов
/ 12 августа 2009

Поставьте public перед 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
    }
}

По умолчанию, если не указано иное, все участники являются личными.

...