@romaro

Правильно ли я реализую свойство с «частичной поддержкой»?

У меня есть базовый класс, который хранит состояние формы. По умолчанию форма считается доступной для отправки:
public abstract class BaseFormContext : BaseContext
    {
        private bool _isFormReadyToSend = true;

        public BaseFormContext()
        {
...
        }

        /// <summary>
        /// The method determines the possibilities to send Form.
        /// If false, SendButton will be disabled
        /// </summary>
        public virtual bool IsFormReadyToSend
        {
            get { return _isFormReadyToSend; }
            set { _isFormReadyToSend = value; }
        }

 ...

    }


В некоторых дочерних классах этот метод может быть переопределен:
internal class LoginWindowContext : BaseFormContext
    {
...

        public override bool IsFormReadyToSend
        {
            get {
                return _Login != String.Empty && _Password != String.Empty;
            }
            set {
               throw new NotSupportedException();
            }
        }
    }


Очевидно, что в случае такой реализации метод set не имеет смысла поддерживать, т.к. он будет устанавливать значение в переменную базового класса без возможности забрать оттуда данные.

Правильно ли будет выбрасывать здесь исключение или есть другой подход для реализации этого паттерна?
  • Вопрос задан
  • 100 просмотров
Решения вопроса 2
vabka
@vabka Куратор тега C#
Токсичный шарпист
Вообще это нарушение принципа подстановки Лисков.
Тот кто зависит от BaseFormContext ожидает, что можно вызвать set у свойства IsFormReadyToSend, а ты тут кидаешь NotSupported.

Более разумное тут решение - вообще не определять IsFormReadyToSend в BaseFormContext и обойтись интерфейсом с геттером.
А конкретный наследник уже сам решит, что будет делать геттер, и нужен ли вообще сеттер.
Ответ написан
yarosroman
@yarosroman Куратор тега C#
C# the best
set {
                  base.IsFormReadyToSend == value
            }


protected bool _isFormReadyToSend = true;

какой проще решайте
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы