Как реализовать различные модификаторы доступности, когда я реализую интерфейс
Я хочу создать интерфейс со свойством, которое имеет различные модификаторы доступности в производных классах, например:
public interface IPrisoner
{
string PrisonerName { get; set; }
}
public class Prisoner : IPrisoner
{
public string PrisonerName { get; private set; }
}
но в этом случае я получаю ошибку:
"Prisoner" не реализует элемент интерфейса "IPrisoner.PrisonerName.set". Prisoner.PrisonerName.set не является публичным.
Как это реализовать?
1 ответ
Похоже, вы контролируете определение интерфейса и можете его изменить. Если это так, это так же просто, как опустить установщик в определении свойства в интерфейсе, например так:
public interface IPrisoner
{
string PrisonerName { get; }
}
Это заставит интерфейс предоставлять только геттер. Однако, когда вы реализуете интерфейс, вы можете определить установщик, используя любой модификатор доступа, который вы хотите, так что, как и в вашем вопросе, вы можете просто реализовать интерфейс следующим образом:
public class Prisoner : IPrisoner
{
public string PrisonerName { get; private set; }
}
Если вы определили установщик здесь как открытый (IE, опустите private
модификатор доступа), он по-прежнему не будет доступен через IPrisoner
интерфейс, только ссылки на конкретные Prisoner
Тип выставит это. Вы можете определить свойства, которые имеют только сеттер и не имеют геттер через интерфейс, таким же образом.