Как скрыть поле поддержки от остальной части класса
Есть ли способ заставить остальную часть моего класса получить доступ к установщику свойств, а не к вспомогательному полю? Рассмотрим следующий неуклюжий код:
public class Brittle
{
private string _somethingWorthProtecting;
public string SomethingWorthProtecting
{
get { return _somethingWorthProtecting; }
set
{
_somethingWorthProtecting = value;
ReallyNeedToDoThisEverTimeTheValueChanges();
}
}
public void OhDearWhatWasIThinking()
{
_somethingWorthProtecting = "Shooting myself in the foot here, aren't I?";
}
}
Насколько я знаю, C# не предоставляет какого-либо механизма, который не позволил бы разработчику класса совершить эту ошибку. (Авто-свойства явно не подходят в этой ситуации.) Существует ли схема проектирования или практика, которая может помочь защитить от таких непреднамеренных переходов?
1 ответ
Решение
Вы можете переместить эту логику в абстрактный базовый класс:
public abstract class Brittle
{
private string _somethingWorthProtecting;
public string SomethingWorthProtecting
{
get { return _somethingWorthProtecting; }
set
{
_somethingWorthProtecting = value;
ReallyNeedToDoThisEverTimeTheValueChanges();
}
}
//.....
}
тогда вы можете быть уверены, что никто не будет создавать экземпляр этого класса, а производные классы не смогут получить доступ к закрытому полю.
public class BrittleDerived : Brittle
{
public void DoSomething()
{
// cannot access _somethingWorthProtecting;
}
}