Инициализация свойства или поля
От: merge  
Дата: 08.10.10 04:20
Оценка:
Вот простой код


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, а в конструкторе инициализировать поле.
Чем вызвано его предложение? Ведь вроде как плохо иметь реализацию просто геттера
Re: Инициализация свойства или поля
От: Sinix  
Дата: 08.10.10 04:28
Оценка:
Здравствуйте, merge, Вы писали:


M>всё бы ничего, но вот решарпер предложил мне удалить сеттер из свойства Rate, а в конструкторе инициализировать поле.

M>Чем вызвано его предложение?
[КО]
Тем, что этот сеттер нигде не используется.
[/КО]

M>Ведь вроде как плохо иметь реализацию просто геттера

Решарпер за вас думать не будет. Если вы считаете, что свойство Rate доолжно быть неизменяемым — так и сделайте.
Re: Инициализация свойства или поля
От: Sinix  
Дата: 08.10.10 04:33
Оценка: 1 (1) +2
Здравствуйте, merge, Вы писали:
UPD: прочитал код — не делайте так пожалуйста.
a.Rate = 10;
// ...
if (a.Rate == 10)
{
   
}
Re[2]: Инициализация свойства или поля
От: merge  
Дата: 08.10.10 05:02
Оценка:
Здравствуйте, Sinix, Вы писали:

S>Здравствуйте, merge, Вы писали:

S>UPD: прочитал код — не делайте так пожалуйста.
S>
S>a.Rate = 10;
S>// ...
S>if (a.Rate == 10)
S>{
   
S>}
S>


пример именно с рейтом или с сравнением свойства?
можно аргументы услышать в любом случае
Re: Инициализация свойства или поля
От: Qbit86 Кипр
Дата: 08.10.10 05:34
Оценка: +1
Здравствуйте, merge, Вы писали:

M>Ведь вроде как плохо иметь реализацию просто геттера


Всё наоборот, предпочтительнее иметь только геттеры и неизменяемые классы. Сеттер — это уступка задаче. See also: http://fprog.ru/2009/issue1/eugene-kirpichov-fighting-mutable-state/.

M>всё бы ничего, но вот решарпер предложил мне удалить сеттер из свойства Rate, а в конструкторе инициализировать поле.

M>Чем вызвано его предложение?

Как минимум тем, что Rate — это ведомое (зависимое) свойство, ведущее же — I.
Глаза у меня добрые, но рубашка — смирительная!
Re[3]: Инициализация свойства или поля
От: Sinix  
Дата: 08.10.10 05:49
Оценка:
Здравствуйте, merge, Вы писали:

M>пример именно с рейтом или с сравнением свойства?

Cмысл в том, что мы не получим из свойства то, что в него только что положили.

Такое допустимо только если:
1) класс — обёртка вокруг любого недетерминированного ресурса — файла, контрола, сетевого сокета.
-и-
2) геттер возвращает действительно изменившееся значение.

M>можно аргументы услышать в любом случае

Property Usage Guidelines

Properties should be stateless with respect to other properties.


Choosing Between Properties and Methods

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.

 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.