单例与静态类的相同作用
1.单例与静态类只能拥有一个实例,该实例在应用程序的整个周期中用于保持应用程序的全局状态。
2.单例和静态类都可以实现线程安全。
单例与静态类的区别?
需要记住的是, 静态是属于C#中的一种语言功能, 而单例是一种设计模式。所以两者属于不同的领域。
1.无法创建静态类的实例, 但是可以创建单个类的实例, 然后重用。
2.编译器编译静态类, 在内部静态类视为抽象和密封类。
3.单例的构造函数始终标记私有, 我们无法从单例类外部创建实例。
4.静态类是在应用程序第一次加载进行初始化, 而单例加载可以懒加载也可以由CLR自动加载。
5.静态类不能作为参数传递, 单例则可以作为参数传递。
6.静态类不能集成接口
7.单例的对象可以克隆, 静态类不行, 单例的对象可以释放,静态类不行。
8.无法使用静态类实现依赖注入,因为静态类不是接口驱动。
9.单例代表整个应用程序生命周期的单个对象, 属于应用程序级别, 而静态类没有任何对象指针, 属于应用域级别。
单例和静态类的内存管理
静态变量或者静态类不存储在堆栈的内存当中, 而堆栈的内从中存在一些称之为高频堆的特定控件, 其中存储静态类和静态变量。
该空间超出了垃圾收集器的范围, 所以, 内存只有在响应的进程或者AppDomain结束时才会被释放。
而单例类包含静态的应用, 所以垃圾回收器无法回收它, 并且仅仅在相应的进程或AppDomain结束时, 静态类和单例都会被销毁。