Доступ к члену второго родителя (наследование)

StackOverflow https://stackoverflow.com/questions/1262846

  •  13-09-2019
  •  | 
  •  

Вопрос

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

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

Это было полезно?

Решение

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

Другие советы

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top