传统的double check :
public sealed class Singleton
{
private static Singleton instance = null;
private static readonly object padlock = new object();
Singleton()
{
}
public static Singleton Instance
{
get
{
if (instance == null)
{
lock (padlock)
{
if (instance == null)
{
instance = new Singleton();
}
}
}
return instance;
}
}
}
缺陷:
1.代码很臃肿
2.double check性能稍微差一些(比起后面的实现版本)
利用.net framework static特性的版本版:
public sealed class Singleton
{
public static readonly Singleton instance = new Singleton();
private Singleton()
{
}
}
1.如何保证单例和线程安全?
因为静态实例在AppDomain里面只有一份内存
2.缺陷?
静态构造函数在field之前执行,没有lazy(只有用的时候才实例)
lazy版本
public sealed class Singleton
{
public static readonly Singleton instance = new Singleton();
// Explicit static constructor to tell C# compiler
// not to mark type as beforefieldinit
static Singleton()
{
}
private Singleton()
{
}
}
改进的地方:
显示声明静态构造函数,告诉编译器,在field之后执行,这样就只有field被拿来用了,才会实例化
分享到:
相关推荐
C#单例模式C#单例模式详解C#单例模式详解C#单例模式详解
c#单例实现方式
一个用C#写的 实现单例模式的源码程序和大家分享交流一下
主要介绍了浅谈C#单例模式的实现和性能对比的相关资料,详细的介绍了6种实现方式,需要的朋友可以参考下
C# 单例模式小实例C# 单例模式小实例C# 单例模式小实例C# 单例模式小实例C# 单例模式小实例
c#单例模式示例,帮助实现懒惰加载,线程安全。
如:IO处理,数据库操作等,由于这些对象都要占用重要的系统资源,所以我们必须限制这些实例的创建或始终使用一个公用的实例,这就是我们今天要介绍的——单例模式(Singleton)。 使用频率高 单件模式(Singleton...
1、包含C#实现OPCUA的Server和Client的核心代码。 2、包含C#统一接口规范封装后的应用代码。
C# 实例 源码 利用vs2005创建源码 北大青鸟ACCP 合肥科海-浪漫的明明 谢谢分享
Socket利用单例来实现服务器与客户端交互
C#版本的单例模式源码
unity中在场景切换时需要经常数据分享并处理,在此分享给大家利用C#模式和Unity模式分别实现的单例共享数据
项目5-收支分类管理功能实现-C#-Windows项目开发案例教程课件 c#经典案例.pdf
项目5-收支分类管理功能实现-C#-Windows项目开发案例教程课件 c#经典案例.pptx
C#单例模式的应用,这里给的是C#里面一个单例模式的应用案例,面向对象过程中不可避免的需要用到单例模式,我在博客园中有详细说明单例模式怎么应用的,链接地址:...
主要介绍了c# 单例模式的实现方法,文中讲解非常细致,代码帮助大家更好的理解和学习,感兴趣的朋友可以了解下
单例模式窗口的实现,c#程序,winform,实现单例窗口,点击后不会新弹出页面
C#实现-回溯求解-N皇后,根据软考书籍中的C代码改写实现C#版的回溯N皇后问题。