Немного про Singleton и Static

Просто о NET | создано: 17.11.2022 | опубликовано: 18.12.2022 | обновлено: 13.01.2024 | просмотров: 1304

Несколько фактов про Singleton и Static. Делайте вывод и принимайте решение сами что лучше..., а что что лучше не использовать.

Разница между Singleton и Static

Может быть это не совсем раз между объектами, но на основании фактов точно можно определиться как и где можно (или нужно) использовать Singleton или Static классы.

Итак факты о Singleton и Static:

  • Класс Singleton поддерживает реализацию (implementation) interface, в то время как static классы не могут реализовывать (implement) интерфейсы (interfaces).
  • Класс Singleton поддерживает наследование (inheritance), в то время как Static класс является запечатанным (sealed) классом, и поэтому не может стать наследником для других классов.
  • Класс Singleton может наследоваться (inherit) от других классов, а класс Static не может, причем даже от других статичных классов.
  • Класс Singleton может быть инстанциирован (instantiated) использую конструкцию new, класс static не может быть инстанциирован (instantiated).
  • И Singleton, и Static хранятся в памяти кучи (Heap memory), но статические классы хранятся в специальной области памяти кучи, называемой высокочастотной кучей (High-Frequency Heap). Объекты в высокочастотной куче не собираются сборщиком мусора сборщиком мусора, поэтому статические элементы доступны повсюду).
  • Класс Singleton может утилизирован (Dispose), а статический класс — нет. 
  • Класс Singleton может иметь конструктор (constructor), а статический класс может иметь только закрытый статический конструктор без параметров (private static parameterless constructor) и не может иметь конструкторы экземпляров (instance constructors).
  • Статический класс имеет лучшую производительность, поскольку статические методы связываются во время компиляции.
  • Класс Singleton можно загружать отложенно (lazy loaded), когда это необходимо, в то время как статические классы загружаются всегда. Статические классы .NET Framework загружаются CLR при загрузке программы или пространства имен, содержащего класс - автоматически.

Заключение

Если я упустил какой-нибудь факт, напишите в комментариях, если получится - обсудим.