Подтвердить что ты не робот

Возможен ли публичный и частный сеттеры с одинаковыми именами в С#?

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

public String Password
{
    set { this._password = value; }
}

private String Password
{
    get { return this._password; }
}
4b9b3361

Ответ 1

Да, возможно, даже с авто свойствами. Я часто использую:

public int MyProperty { get; private set; }

Ответ 2

Да, с С# 2.0 вы можете указать разные уровни доступа для получателя и установщика свойства.

Но у вас синтаксис неправильный: вы должны объявить их частью одного и того же свойства. Просто отметьте те, которые вы хотите ограничить, с помощью private. Например:

public String Password
{
    private get { return this._password; }
    set { this._password = value; }
}

Ответ 3

public String Password
{
    private set { this._password = value; }
    get { return this._password; }
}

или вы можете использовать свойство, реализованное автоматически:

public String Password { get; private set; }

Ответ 4

public String Password
{
    private set { this._password = value; }
    get { return this._password; }
}

MSDN:

Методы get и set обычно ничем не отличается от других методов. Oни может выполнять любую программную логику, бросать исключений, переопределить и с любыми модификаторами, допускаемыми язык программирования.

Изменить: Цитата MSDN просто для того, чтобы уточнить, почему geter и setter могут иметь разные возможности доступа mdofiers, Хорошая точка, поднятая @Cody Gray:

Да, свойства могут выполнять программу логики и исключений. Но они не должно. Свойства предназначены для быть очень легкими методами, сравнимый с доступом к полю. программист должен ожидать, что сможет использовать их, поскольку они любая заметная производительность последствия. Так слишком тяжело программная логика сильно обескуражена. И хотя сеттеры могут бросать исключения при необходимости геттеры должны никогда не бросайте исключения

Ответ 5

public string Password { get; private set; }

Ответ 6

Чтобы получить значок "Экскаватор" и обновить ответ - поля только для чтения, инкапсулированные с помощью свойства get-only

private readonly int myVal;
public int MyVal get { return myVal; }

может быть теперь (с С# 6.0) сокращен до

public int MyVal { get; }