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

Статический метод статического класса против статического метода нестатического класса (С#)

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

Спасибо,

Эркан

4b9b3361

Ответ 1

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

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

  • Предоставить метод factory для создания экземпляра этого типа;
  • Предоставить вспомогательную функциональность, которая не требует экземпляра типа;

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

Ответ 2

Я предполагаю, что вас попросили разницы?

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

Ответ 3

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

Ответ 4

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

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

var myClass = MyClass.Create();
var myClass = MyClass.Parse("serialized.MyClass");

Ответ 5

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

Ответ 6

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

Ссылка: MS Docs