C#入门(十二) static关键字(共享)和单例模式

前言

1、什么是static?
static 是一种修饰符,它被用来控制变量的存储方式和可见性。

2、什么时候用static?
(1).需要一个数据对象为整个类而非某个对象服务,同时又力求不破坏类的封装性,即要求此成员隐藏在类的内部,对外不可见。
(2).有些时候,我们希望我们所引用的类,只存在一个对象,这时候,我们就可以通过static来实现一个单例类。这种模式也叫单例模式

被static修饰的类,变量,方法,分别叫做静态类,静态变量,静态方法。

静态类:

1.要求所有成员必须是静态的。
2.类可以有一个静态构造函数,但不能有实例构造函数,不能创建该类的实例。
3.静态类是不能被继承的。

静态类的声明:
public static class MyClass{}
static MyClass(){}//new MyClass();

静态变量:

静态变量被类的所有实例共享,所有实例都访问同一内存位置,因此,如果该内存位置的值被一个实例改变(实例无法直接访问静态变量,但可以通过函数修改),那么其他实例访问的值也都会改变。

静态变量声明:
public class MyClass
{int x=10;
static int y=20;//y就是一个静态变量
}
静态变量的访问方式:类名.变量名

静态方法

如同静态变量,静态方法独立于任何类的实例,即使没有类的实例,仍然可以调用静态方法。
静态方法不能直接访问实例成员(非静态变量和非静态方法),但可以访问其他静态成员。
静态方法可以间接通过类对象访问非静态成员。
静态方法的调用:类名.方法名

静态方法的声明:
static void Main(string[] args)

单例模式

一:单例模式的特点
1.单例类只能有一个实例.
2.单例类必须自己创建自己的唯一实例.
3.单例类必须给所有其他对象提供这一实例。

二:单例模式的写法(一种)
C#入门(十二) static关键字(共享)和单例模式_第1张图片

三:单例模式的优点:
1.提供了对唯一实例的受控访问,除了该公共访问点,不能通过其他途径访问该实例
2.由于在系统内存中只存在一个对象,因此可以节约系统资源,特别对于一些需要频繁创建和销毁的对象单例模式可以提高系统的性能。

四:单例模式的缺点:
1.不适用于变化的对象,如果同一类型的对象总是要在不同的用例场景发生变化,单例就会引起数据的错误,不能保存彼此的状态。
2.由于单利模式中没有抽象层,因此单例类的扩展有很大的困难。
3.单例类的职责过重,在一定程度上违背了“单一职责原则”。
4.滥用单例将带来一些负面问题,如为了节省资源将数据库连接池对象设计为的单例类,可能会导致共享连接池对象的程序过多而出现连接池溢出;如果实例化的对象长时间不被利用,系统会认为是垃圾而被回收,这将导致对象状态的丢失。

你可能感兴趣的:(C#入门,C#入门)