C#_单例模式
2023-09-27 14:21:27 时间
单例:在程序的整个进程中只会被实例化一次
如:User user =new User();实例化一个User();的时候new User()是调用的 User类的 默认的公有构造函数:public User(){};
一.想要整个程序只实例化一次这个User的话如:
1.private static User_user=null; 定义一个私有的静态变量
2.提供静态公有方法返回实例化对象
public static GetUser(){ if(User_user==null) { User_user=new User(); } return User_user; }
3.调用:User user =User.GetUser();//进行返回单个实例
4.多线程的时候需要加一把锁:
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
private static object _lock =new object();//定义一个静态的对象最好是object类型 public static GetUser(){ if (User_user==null) { lock (_lock) { if(User_user==null) { User_user=new User(); } } } return User_user; }
二.想要整个程序只实例化一次这个User的话如:
private static User User_user =null;//提供私有静态实例对象 static User()//CLR运行的时候,第一次使用这个类之前,一定会而且只执行一次 { User_user =new User(); } public static GetUser()//提供公有静态方法供外部调用 { return User_user; }
//双重锁机制 namespace Singleton { public class Singleton { //定义一个私有的静态全局变量来保存该类的唯一实例 private static Singleton singleton; //定义一个只读静态对象 //且这个对象是在程序运行时创建的 private static readonly object syncObject = new object(); /// <summary> /// 构造函数必须是私有的 /// 这样在外部便无法使用 new 来创建该类的实例 /// </summary> private Singleton() { } /// <summary> /// 定义一个全局访问点 /// 设置为静态方法 /// 则在类的外部便无需实例化就可以调用该方法 /// </summary> /// <returns></returns> public static Singleton GetInstance() { //这里可以保证只实例化一次 //即在第一次调用时实例化 //以后调用便不会再实例化 //第一重 singleton == null if (singleton == null) { lock (syncObject) { //第二重 singleton == null if (singleton == null) { singleton = new Singleton(); } } } return singleton; } } }
相关文章
- C#:预处理器指令(转载16)
- java的大端小端和c#如何对应
- C#中+=的用法
- Java、C++、Python、Ruby、PHP、C#和JavaScript的理解
- XML编码utf-8有中文无法解析或乱码 C#
- C# 连接mysql数据库
- C#调用C++写的dll,C++调用C++的dll
- 在C#代码中应用Log4Net(四)在Winform和Web中捕获全局异常
- C# 实现启用或停止本地网络连接
- c# 打印 bartender
- .NET(C#) 设计模式 建造者模式
- .NET(C#) 设计模式 单例模式
- .NET(C#) Linq中join、into、let和group by的使用
- .NET Core(C#) 使用AngleSharp生成自动缩进格式化的html方法
- [C#] 获取计算机内部信息 - ComputerInfoHelper
- 读经典——《CLR via C#》(Jeffrey Richter著) 笔记_运行时解析类型引用
- C#设计模式系列:原型模式(Prototype)
- C#设计模式系列:模板方法模式(Template Method)
- C#设计模式系列:桥接模式(Bridge)
- 一键部署MONO 免费空间支持C# 再也不担心伙食费换空间了
- 2019-8-31-C#-对-byte-数组进行模式搜索
- C# 使用汇编
- C#读取EXCEL数据