Хорошо, поэтому у C # есть свойства
public int Prop {get;set;}
Я могу поместить геттер и сеттер на разные интерфейсы, как это:
public interface IRead
{ int AnInt { get; } }
public interface IWrite
{ int AnInt { set; } }
И затем смешивать и сопоставлять их следующим образом:
public class WorkingClass : IRead, IWrite
{
public int AnInt { get; set; }
}
Там, где он начинает работать неправильно, у меня может быть базовый объект.
public class BaseClass : IRead
{
private int _anInt;
public BaseClass(int anInt)
{ _anInt = anInt; }
public virtual int AnInt
{ get { return _anInt; } }
}
Затем я хочу получить производный класс, который также может писать.
public class Derived : BaseClass, IWrite //bits elided
{
public override int AnInt
{
get { return base.AnInt; }
set { throw new NotImplementedException(); } //<-- error
}
}
Что, конечно, не работает.
На самом деле это случается не так часто.Я предпочитаю иметь методы с изменением состояния и иметь свойства только для чтения.Я думаю, это дизайн 101, но в качестве надуманного примера у меня было бы свойство Age, содержащее только get, а затем метод IncreaseAge.
Итак, учитывая все это.Если бы вы хотели иметь изменяемый объект с отдельными интерфейсами чтения и записи, как бы вы это сделали?
Я мог бы сделать это в стиле Java с использованием отдельных методов getter / setter на каждом интерфейсе.Но это сводит на нет преимущества свойств + одна из полицейских программ будет кричать на меня.