class A
{
private decimal _rate;
public A(int i, double rate)
{
Rate = rate;
I = i;
}
public int I
{ get; set; }
public decimal Rate
{
get { return _rate * I; }
set { _rate = value; }
}
}
всё бы ничего, но вот решарпер предложил мне удалить сеттер из свойства Rate, а в конструкторе инициализировать поле.
Чем вызвано его предложение? Ведь вроде как плохо иметь реализацию просто геттера
M>всё бы ничего, но вот решарпер предложил мне удалить сеттер из свойства Rate, а в конструкторе инициализировать поле. M>Чем вызвано его предложение?
[КО]
Тем, что этот сеттер нигде не используется.
[/КО]
M>Ведь вроде как плохо иметь реализацию просто геттера
Решарпер за вас думать не будет. Если вы считаете, что свойство Rate доолжно быть неизменяемым — так и сделайте.
Здравствуйте, merge, Вы писали:
M>Ведь вроде как плохо иметь реализацию просто геттера
Всё наоборот, предпочтительнее иметь только геттеры и неизменяемые классы. Сеттер — это уступка задаче. See also: http://fprog.ru/2009/issue1/eugene-kirpichov-fighting-mutable-state/.
M>всё бы ничего, но вот решарпер предложил мне удалить сеттер из свойства Rate, а в конструкторе инициализировать поле. M>Чем вызвано его предложение?
Как минимум тем, что Rate — это ведомое (зависимое) свойство, ведущее же — I.
Здравствуйте, merge, Вы писали:
M>пример именно с рейтом или с сравнением свойства?
Cмысл в том, что мы не получим из свойства то, что в него только что положили.
Такое допустимо только если:
1) класс — обёртка вокруг любого недетерминированного ресурса — файла, контрола, сетевого сокета.
-и-
2) геттер возвращает действительно изменившееся значение.
M>можно аргументы услышать в любом случае Property Usage Guidelines
Properties should be stateless with respect to other properties.
Consider using a property if the member represents a logical attribute of the type.
Do use a property, rather than a method, if the value of the property is stored in the process memory and the property would just provide access to the value.