2015-07-14 2 views
0

У меня есть базовый класс и производный класс. Каждый из них имеет то же свойство, что и сеттер private, поэтому значение может быть установлено некоторой логикой внутри класса.Унаследованное автоматически реализованное свойство с частным сетевым устройством

class First 
{ 
    internal virtual int Value { get; private set; } 

    void SetValue(int toValue) 
    { 
     Value = toValue; 
    } 
} 

class Second : First 
{ 
    internal override int Value { get; private set; } 

    void SetValue(int toValue) 
    { 
     Value = toValue; 
    } 
} 

Это приводит к ошибке компилятора:

The property or indexer ... cannot be used in this context because the set accessor is inaccessible.

Почему это так, и как я могу добиться того, что я пытаюсь сделать? Разве это невозможно с автоматически реализованными свойствами, другими словами, нужно ли вместо этого использовать поле поддержки?

+2

Что вы на самом деле пытаетесь достичь? Наличие независимых свойств с тем же именем звучит как рецепт катастрофы для меня. –

+0

Это все, что касается виртуальных членов: возможность переопределить их в производном классе с более конкретной логикой. Я не уверен, что следую вашим рассуждениям. –

+0

Но у вас нет конкретной логики - у вас есть еще одно авто-реализованное свойство. И если вы думаете об этом свойстве как о публичном доступе и о частном наборе, то совершенно очевидно, что вы не можете переопределить частный метод. Опять же, чего вы действительно пытаетесь достичь? Можете ли вы дать более содержательный пример? –

ответ

1

Second были бы неспособны set значения Value из-за FirstValue сек сеттера быть private. Если вам нужен ваш подкласс, чтобы его можно было установить, он должен быть protected в базе.

0

Getters and Setters - в основном методы. Вы не можете переопределять методы, которые не видите. virtual в этом случае применяется только к получателю, так как virtual private недопустим.

Дело не только в том, что вы не можете его использовать, вы не можете его переопределить.

Смежные вопросы