Лучше использовать статические функции, если не нужны члены класса? - PullRequest
4 голосов
/ 21 января 2011

У меня есть функция-член, которая не зависит от переменных-членов класса. (в моем случае это класс ASP.Net Page)

Функция защищена, она мне не нужна за пределами этого класса. Его единственная цель - создать URL из заданного объекта.

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

Ответы [ 6 ]

5 голосов
/ 21 января 2011

Возможно, но я бы сделал еще один шаг вперед.

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

4 голосов
/ 21 января 2011

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

4 голосов
/ 21 января 2011
0 голосов
/ 21 января 2011

Это зависит на самом деле. Использует ли ваш метод какие-либо данные экземпляра или нет - это деталь реализации этого метода. Если это личное, то вы можете сделать его статичным, если хотите. Однако, если он может быть виден за пределами вашего класса (например, это защищенный метод), вам следует сначала подумать об интерфейсе и сделать его статическим, только если для этого метода никогда не будет смысла обращаться к данным объекта.

0 голосов
/ 21 января 2011

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

Я не думаю, что есть какие-либо проблемы с производительностью со статической, если вообще что-то быстрее. Просто подумайте обо всех методах расширения, которые появились в более новых версиях .net. они все статичны!

0 голосов
/ 21 января 2011

Не могу сказать, что знаю достаточно о спектакле, но я слышал, что было бы неплохо сделать его статичным, если он не зависит от учеников. Обычно это дает вам преимущество в том, что вам не нужно тратить выделение на тот случай, если вам просто нужен этот метод, но поскольку он находится внутри класса, вы, вероятно, уже работаете с экземпляром своего объекта. Я бы сделал это статичным, но в вашем случае я не знаю, есть ли большая разница (с точки зрения кодирования).

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