Абстрактное свойство с общедоступным геттером, возможно ли определить частный сеттер в конкретном классе?

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

Что у меня есть на данный момент:

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_Value , потому что в AbstractClass не существует переопределяемого метода доступа set.

В ConcreteClass2 я получаю сообщение об ошибке для обоих Value ' s, потому что член с таким же именем уже объявлен.

ConcreteClass3 не выдает ошибки, но даже несмотря на то, что метод доступа Set Value будет скомпилирован в set_Value, наоборот. Определение set_Value не означает, что Value получает метод доступа set. Поэтому я не могу присвоить значение свойству ConcreteClass3.Value. Я могу использовать ConcreteClass3.set_Value ("значение"), но это не то, чего я здесь пытаюсь достичь.

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

Если вам интересно, это всего лишь теоретический вопрос. У меня нет реальной ситуации, когда нужно что-то подобное. Но я могу представить себе абстрактный класс, который не Меня не волнует, как устанавливается свойство, но для этого нужно иметь возможность получить свойство.

46
задан Kalamarico 20 December 2017 в 09:59
поделиться