«Скажи, не спрашивай»: в чем разница между не пустым методом и геттером? - PullRequest
1 голос
/ 18 января 2010

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

EDIT:

int CalculateSomething();

int Calculation { get; }

Тот факт, что я могу изменить сигнатуру CalculateSomething и передать в нее значения, если я хочу полностью сойти с ума. Поэтому мой вопрос изменен на: Является ли принципиальное различие между методами получения и не пустыми методами в том, что аргументы могут передаваться в не пустые методы?

Ответы [ 2 ]

9 голосов
/ 18 января 2010

Microsoft имеет руководство по выбору свойств и методов .

  • Рассмотрите возможность использования свойства, если элемент представляет логический атрибут типа.
  • Используйте свойство, а не метод, если значение свойства хранится в памяти процесса и свойство просто обеспечивает доступ к значению.
  • Используйте метод, а не свойство, в следующих ситуациях.
    • Операция на несколько порядков медленнее, чем набор полей. Если вы даже рассматриваете возможность предоставления асинхронной версии операции, чтобы избежать блокировки потока, очень вероятно, что операция слишком дорога, чтобы быть свойством. В частности, операции, которые обращаются к сети или файловой системе (кроме однократной инициализации), скорее всего должны быть методами, а не свойствами.
    • Операция является преобразованием, например, методом Object.ToString.
    • Операция возвращает новый результат при каждом вызове, даже если параметры не меняются. Например, метод NewGuid возвращает другое значение при каждом вызове.
    • Операция имеет значительный и наблюдаемый побочный эффект. Обратите внимание, что заполнение внутреннего кэша обычно не считается наблюдаемым побочным эффектом.
    • Операция возвращает копию внутреннего состояния (это не включает копии объектов типа значения, возвращаемых в стек).
    • Операция возвращает массив.
3 голосов
/ 18 января 2010

Разве не большая разница, что вы не можете передать переменную получателю?

функция:

private int Getyear(datetime date) { }

Недвижимость:

private DateTime GetDate {
    get {return _date};
}

Вы не можете сделать это с помощью свойства getter?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...