Изменить: Оказывается, я пропустил что-то очевидное, но я собираюсь оставить вопрос открытым, если кто-то другой совершит ту же очевидную ошибку. Спасибо тем, кто указал на это См. Пояснение для объяснения.
Возможно ли иметь непубличный набор свойств, который переопределяет свойство интерфейса?
Возможно, у меня есть глупый момент, но мне кажется, что наличие свойства, определенного в интерфейсе, подразумевает, что ни один класс-получатель не может предоставить какой-либо непубличный набор для указанного свойства.
Пример:
interface IField
{
bool IsValid { get; }
}
... и поскольку свойства интерфейса могут не иметь модификаторов доступности, это означает, что:
class Field : IField
{
public override bool IsValid { get; protected set; }
}
... не будет возможным, несмотря на то, что он концептуально отвечает требованиям интерфейса.
IMO это имеет большие отрицательные последствия для инкапсуляции, которые могут быть сделаны с помощью непубличных свойств, и предотвращает использование нескольких шаблонов общего использования для свойств.
Я знаю, что вы можете создать непубличный член SetIsValid, который модифицирует общее хранилище резервных копий, но это создаст непоследовательный шаблон и добавит то, что в противном случае было бы кодовым шумом, если бы не было необходимости.
Я что-то пропустил?
Изменить: Да, я пропустил что-то
Сейчас я изменяю код другого пользователя и понимаю, что класс, с которым я боролся, реализовал интерфейс и получил базовый класс. И я новичок в С#. Это вызвало замешательство.
фактический класс выглядел так:
class Field : IField, BaseField
{
public override bool IsValid { get; protected set; }
}
... где BaseField также реализовал интерфейс, но не реализовал набор.