Как я могу создать публичный геттер и частный сеттер для свойства? Правильно ли следующее?
public String Password
{
set { this._password = value; }
}
private String Password
{
get { return this._password; }
}
Как я могу создать публичный геттер и частный сеттер для свойства? Правильно ли следующее?
public String Password
{
set { this._password = value; }
}
private String Password
{
get { return this._password; }
}
Да, возможно, даже с авто свойствами. Я часто использую:
public int MyProperty { get; private set; }
Да, с С# 2.0 вы можете указать разные уровни доступа для получателя и установщика свойства.
Но у вас синтаксис неправильный: вы должны объявить их частью одного и того же свойства. Просто отметьте те, которые вы хотите ограничить, с помощью private
. Например:
public String Password
{
private get { return this._password; }
set { this._password = value; }
}
public String Password
{
private set { this._password = value; }
get { return this._password; }
}
или вы можете использовать свойство, реализованное автоматически:
public String Password { get; private set; }
public String Password
{
private set { this._password = value; }
get { return this._password; }
}
Методы get и set обычно ничем не отличается от других методов. Oни может выполнять любую программную логику, бросать исключений, переопределить и с любыми модификаторами, допускаемыми язык программирования.
Изменить: Цитата MSDN просто для того, чтобы уточнить, почему geter и setter могут иметь разные возможности доступа mdofiers, Хорошая точка, поднятая @Cody Gray:
Да, свойства могут выполнять программу логики и исключений. Но они не должно. Свойства предназначены для быть очень легкими методами, сравнимый с доступом к полю. программист должен ожидать, что сможет использовать их, поскольку они любая заметная производительность последствия. Так слишком тяжело программная логика сильно обескуражена. И хотя сеттеры могут бросать исключения при необходимости геттеры должны никогда не бросайте исключения
public string Password { get; private set; }
Чтобы получить значок "Экскаватор" и обновить ответ - поля только для чтения, инкапсулированные с помощью свойства get-only
private readonly int myVal;
public int MyVal get { return myVal; }
может быть теперь (с С# 6.0) сокращен до
public int MyVal { get; }