Я пытаюсь создать абстрактный класс, который определяет свойство с геттером. Я хочу оставить это до производных классов, чтобы решить, хотят ли они реализовать сеттер для свойства или нет. Возможно ли это?
Что я до сих пор:
public abstract class AbstractClass {
public abstract string Value { get; }
public void DoSomething() {
Console.WriteLine(Value);
}
}
public class ConcreteClass1 : AbstractClass {
public override string Value { get; set; }
}
public class ConcreteClass2 : AbstractClass {
private string _value;
public override string Value {
get { return _value; }
}
public string Value {
set { _value = value; }
}
}
public class ConcreteClass3 : AbstractClass {
private string _value;
public override string Value {
get { return _value; }
}
public void set_Value(string value) {
_value = value;
}
}
В ConcreteClass1
, я получаю сообщение об ошибке на set
. Он не может переопределить set_Value
, потому что в AbstractClass не существует переопределяемого набора элементов доступа.
В ConcreteClass2
, я получаю сообщение об ошибке для Value
, потому что член с тем же именем уже объявлен.
ConcreteClass3
не дает ошибки, но даже несмотря на то, что атрибут набора значений будет скомпилирован в set_Value, он не работает наоборот. Определение set_Value
не означает, что Value
получает набор доступа. Поэтому я не могу присвоить значение свойству ConcreteClass3.Value. Я могу использовать ConcreteClass3.set_Value ( "значение" ), но это не то, что я пытаюсь достичь здесь.
Возможно ли, чтобы абстрактный класс требовал публичного getter, позволяя определить опциональный сеттер в производном классе?
Если вам интересно, это всего лишь теоретический вопрос. У меня нет реальной ситуации, когда требуется нечто подобное. Но я могу представить абстрактный класс, который не заботится о том, как свойство устанавливается, но это должно быть в состоянии получить свойство.