У меня есть набор интерфейсов, которые используются в тесном взаимодействии с определенным изменчивым объектом.
Многим пользователям объекта требуется только возможность считывать значения из объекта, а затем только несколько свойств. Чтобы избежать загрязнения пространства имен (проще intellisense) и чтобы понять смысл использования, я хотел бы иметь небольшой базовый интерфейс, который предоставляет только несколько "ключевых" свойств только для чтения.
Однако почти все реализации будут поддерживать полный интерфейс, который включает в себя изменчивость.
К сожалению, я столкнулся с дорожным блоком, выражающим эту концепцию в С#:
interface IBasicProps {
public int Priority { get; }
public string Name {get;}
//... whatever
}
interface IBasicPropsWriteable:IBasicProps {
public int Priority { set; } //warning CS0108: [...] hides inherited member [...]
public string Name { set; }
//... whatever
}
Я, конечно же, не собирался скрывать каких-либо членов, так что нехорошо!
Конечно, я могу решить это, используя методы просто отлично, но какой правильный выбор? Я бы хотел, чтобы "основной" интерфейс был как можно мал, даже если разделение интерфейсов не имеет никакой цели, кроме передачи намерений. С раздельными интерфейсами просто очевидно, какие методы не собираются делать никакого обновления, и это делает код написания немного понятнее (не говоря уже о том, что для простого простого случая достаточно простых статических одноэлементных прошивок достаточно простого).
Я бы хотел избежать любых абстрактных классов и тому подобного; они делают повторное выполнение или быстрые одноцелевые прокладки все более сложными и труднодоступными.
Итак, идеи?