Невозможно переопределить защищенный набор свойств - PullRequest
6 голосов
/ 31 декабря 2011

У меня есть следующий базовый класс:

abstract class Base
{
 public abstract object Var
 {
  get;
  protected set;
 }
}

И этот производный класс:

class Derived : Base
{
 public override object Var
 {
  get {//code here
  }
  set {//code here -- I get error here!
  }
 }
}

Но я получаю эту ошибку:

Невозможно изменить модификатор доступа при переопределении «защищенного» унаследованного члена «Var»

Я пытался добавить ключевые слова protected и private перед установкой, но это не помогло. Как это исправить?

UPDATE:
Базовый класс должен убедиться, что подклассы предоставляют значение для Var во время создания. Поэтому мне нужно объявить сеттер в базовом классе.
В качестве альтернативы я мог бы объявить закрытую переменную-член, чтобы сделать это, и удалить установщик, но это не вариант, как обсуждалось здесь .

1 Ответ

8 голосов
/ 31 декабря 2011

Проблема в том, что set в вашем производном классе имеет public видимость - поскольку вы не указали protected явно. Поскольку этот набор свойств имеет защищенную видимость в базовом классе, вы получаете сообщение об ошибке

не может изменить модификаторы доступа при переопределении «защищенного» унаследованного члена

Вы можете исправить это, задав набор защищенной видимости в производном классе:

class Derived : Base {
    public override object Var {
        get { return null; }
        protected set { // <------ added protected here
        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...