Страницы

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

понедельник, 9 декабря 2019 г.

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

#c_sharp #net #static


Есть классы, которые наследуются от одного абстрактного класса, у которого есть не
виртуальная функция для работы со строкой:

protected string NormalizeString(string s)
{
    return s.Trim().ToUpper();
}


Нужно ли эту функцию делать статической? Когда функции нужно делать статическими,
а когда обычными, если они не используют поля объекта?
    


Ответы

Ответ 1



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

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

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