Почему команда извлечения метода в Visual Studio создает статические методы? - PullRequest
20 голосов
/ 04 февраля 2009

Почему Visual Studio по умолчанию создает приватный статический метод при рефакторинге кода и выборе метода извлечения?

Если я выполняю рефакторинг нестатического класса, а метод виден только внутри класса, почему он статический?

Есть ли какое-то преимущество в производительности при вызове частного статического метода в нестатическом классе по сравнению с нестатическим методом в нестатическом классе?

Это для удобства чтения просто показать, что метод не полагается ни на какие переменные-члены класса?

Ответы [ 2 ]

28 голосов
/ 04 февраля 2009

Почему Visual Studio по умолчанию создает приватный статический метод при рефакторинге кода и выборе метода извлечения?

Это происходит только в том случае, если ваш метод не имеет доступа к переменным / методам / свойствам-членам. Это хорошо, потому что он в основном работает по принципу наименьших допущений: поскольку вы не обращаетесь к данным, относящимся к экземпляру, он может также сделать метод static.

Есть ли какое-то преимущество в производительности, вызывая закрытый статический метод в нестатическом классе по сравнению с нестатическим методом в нестатическом классе?

Теоретически, может быть, но я сомневаюсь в этом. Однако, делая метод статичным, становится ясно, что он не будет получать доступ к данным экземпляра или изменять их, что я считаю полезной подсказкой.

1 голос
/ 04 февраля 2009

Создание статического метода может рассматриваться как повышение производительности, поскольку отсутствует указатель «this» для передачи в качестве переменной. Я использую ReSharper, и он всегда рекомендует превращать методы в статические, если они не ссылаются на переменную класса.

...