Страницы

Поиск по вопросам

пятница, 12 октября 2018 г.

Статические методы у не статических классов

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


Ответ

Да, я бы сделал эту функцию статической. Принцип очень простой.
Если функция относится к конкретному объекту, она должна быть нестатической. Пример: получение температуры с конкретного термометра — явно нестатическая фукция. Если функция относится ко всем объектам данного типа, то она скорее всего должна быть статической. Пример: получение диапазона температур для класса термометров — явно статическая функция. Если функция не относится ни к какому объекту, то есть является по существу утилитой (как у вас), и не сильно связана с функциональностью класса, её надо бы вынести в отдельный статический класс. Но часто, конечно, лень. Пример: перевод температуры из градусов Фаренгейта в градусы Цельсия — явная функция-утилита.
(Существуют и пограничные случаи, когда не так очевидно, к какому из случаев относится функция. В этих случаях полагайтесь на интуицию или совет более опытных коллег.)

Комментариев нет:

Отправить комментарий