Есть классы, которые наследуются от одного абстрактного класса, у которого есть не виртуальная функция для работы со строкой:
protected string NormalizeString(string s)
{
return s.Trim().ToUpper();
}
Нужно ли эту функцию делать статической? Когда функции нужно делать статическими, а когда обычными, если они не используют поля объекта?
Ответ
Да, я бы сделал эту функцию статической.
Принцип очень простой.
Если функция относится к конкретному объекту, она должна быть нестатической. Пример: получение температуры с конкретного термометра — явно нестатическая фукция.
Если функция относится ко всем объектам данного типа, то она скорее всего должна быть статической. Пример: получение диапазона температур для класса термометров — явно статическая функция.
Если функция не относится ни к какому объекту, то есть является по существу утилитой (как у вас), и не сильно связана с функциональностью класса, её надо бы вынести в отдельный статический класс. Но часто, конечно, лень. Пример: перевод температуры из градусов Фаренгейта в градусы Цельсия — явная функция-утилита.
(Существуют и пограничные случаи, когда не так очевидно, к какому из случаев относится функция. В этих случаях полагайтесь на интуицию или совет более опытных коллег.)
Комментариев нет:
Отправить комментарий