Подтвердить что ты не робот

Должен ли я использовать статические методы в С#

Проведя немного времени, изучая функциональное программирование, мне становится все более естественным желание работать со статическими методами, которые не выполняют никакой мутации.

Есть ли причины, по которым я должен обуздать этот инстинкт?

4b9b3361

Ответ 1

Вопрос, который я нахожу немного странным, потому что статические методы и методы, которые не выполняют никаких мутаций, являются двумя ортогональными классификациями методов. У вас могут быть мутирующие статические методы и непустые методы экземпляра.

Для меня стало более естественным комбинировать функциональное и оо программирование; Мне нравятся методы экземпляра, которые не выполняют никаких мутаций. Функциональное программирование легче понять, поскольку оно препятствует сложным мутациям; Программирование OO легче понять, потому что код и данные, с которыми он работает, находятся близко друг к другу. Зачем выбирать? Объявите силу "и"; сделай оба!

Ответ 2

Вы можете писать рабочие программы таким образом, но это не идиоматично. Если вы хотите работать в команде, я бы попытался обуздать ее. Если никто не читает ваш код, перейдите в гайку.

Ответ 3

По какой-то причине я думаю об этой цитате, когда я читаю ваш вопрос:

Вы можете написать Fortran на любом языке.

Если намерение С# должно быть чисто функциональным, static было бы лишним, потому что по умолчанию было бы статическим. Если вы строго придерживаетесь правил ООП и принципов SOLID, ваш код эффективно становится функциональным (я знаю там цитату о нем где-то там), поэтому вы получаете лучшее из обоих миров.

Причина, по которой я буду обуздать ее в многопользовательском проекте, будет заключаться в том, что это не типичный С# (это действительно С# с наручниками). Вам просто нужен один человек, чтобы нарушить правило и объявить статичное изменяемое свойство, и все идет в ад.

Ответ 4

Не совсем. Мне нравятся мои методы расширения и Linq, но OO-язык следует использовать в стиле OO. Кроме того, все это необходимо для CPU, и для нескольких слоев поверх этого.

Ответ 5

Отличный вопрос.

Я думаю, что ответ зависит от контекста того, что делает ваш код, и насколько он статичен.

В моем коде было меньше статических случаев, так как я программирую много интерфейсов и отмечаю некоторые защищенные виртуальные методы, а не "статические" для таких случаев, как извлечение экземпляра и переопределение шаблона. Это не означает, что вы не можете просто вызвать статические методы из них.

Ответ 6

Есть много причин, которые должны сдерживать этот инстинкт при написании ООП.

Состояние и поведение объекта;

Параметры статического класса и метода, и вы должны быть уверены, какие параметры будут переданы статическим методам. Но класс управляет собой, если метод связан с состоянием.

Я думаю, что только эта причина достаточно для ограничения статических модификаторов.

И по понятной причине мы должны послушать г-жу Лисков. здесь