Как реализовать различные модификаторы доступности, когда я реализую интерфейс

Я хочу создать интерфейс со свойством, которое имеет различные модификаторы доступности в производных классах, например:

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 Тип выставит это. Вы можете определить свойства, которые имеют только сеттер и не имеют геттер через интерфейс, таким же образом.

Другие вопросы по тегам