Немного про Singleton и Static
Просто о NET | создано: 17.11.2022 | опубликовано: 18.12.2022 | обновлено: 13.01.2024 | просмотров: 1370
Несколько фактов про 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 при загрузке программы или пространства имен, содержащего класс - автоматически.
Заключение
Если я упустил какой-нибудь факт, напишите в комментариях, если получится - обсудим.