Статический метод статического класса против статического метода нестатического класса (C #) - PullRequest
47 голосов
/ 15 февраля 2010

Мне задали вышеуказанный вопрос в интервью.Не могли бы вы объяснить различия?(производительность - память - использование - когда использовать что?)

Спасибо,

Эркан

Ответы [ 5 ]

51 голосов
/ 15 февраля 2010

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

Нестатический класс со статическими членами обычно указывает на то, что класс предназначен для создания экземпляра в некоторый момент. Статические методы этих классов обычно делают одну из двух вещей:

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

Также, как уже упоминалось, методы расширения могут быть объявлены только для статического класса.

19 голосов
/ 15 февраля 2010

Я полагаю, вас спросили о различиях?

Статический метод в статическом классе может использоваться для определения метода расширения. Статический метод в нестатическом классе не может.

16 голосов
/ 15 февраля 2010

с точки зрения производительности и использования памяти; точно ничего. Наличие статического класса означает, что вы знаете , что экземпляров нет, но назад в 1.1 было достаточно частного конструктора. Используйте статический класс, если просто не имеет смысла иметь экземпляр! (служебные классы и т. д.)

6 голосов
/ 15 февраля 2010

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

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

var myClass = MyClass.Create();
var myClass = MyClass.Parse("serialized.MyClass");
0 голосов
/ 09 июня 2017

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

...