意图:为了保证一个类仅有一个实例,并提供一个访问它的全局访问点。

1.简单实现(多线程有可能产生多个实例)

    public class CommonSigleton
{
/// <summary>
/// 私有的对象
/// </summary>
private static CommonSigleton instance; /// <summary>
/// 构造方法为Private
/// </summary>
private CommonSigleton()
{ } /// <summary>
/// 公有的属性
/// </summary>
public static CommonSigleton Instance
{
get
{
if(instance == null)
{
instance = new CommonSigleton();
} return instance;
}
}
}

2.双重锁定实现(lock关键字)

    public class DoubLockSigleton
{
private static volatile DoubLockSigleton instance; /// <summary>
/// 辅助锁对象,本身没有意义
/// </summary>
private static object syncRoot = new Object(); /// <summary>
/// 构造方法改为Private
/// </summary>
private DoubLockSigleton()
{ } public static DoubLockSigleton Instance
{
get
{
if (instance == null)
{
lock (syncRoot)
{
if (instance == null)
instance = new DoubLockSigleton();
}
} return instance;
}
}
}

3.利用C#特性实现

    ///该类标记sealed阻止发生派生增加实例
public sealed class DotNetSigleton
{
//变量标记为 readonly,这意味着只能在静态初始化期间(此处显示的示例)或在类构造函数中分配变量。
//公共静态属性为访问实例提供了一个全局访问点。此外,由于构造函数是私有的,因此不能在类本身以外实例化
private static readonly DotNetSigleton instance = new DotNetSigleton(); //由于 Singleton 实例被私有静态成员变量引用,因此在类首次被对Instance属性的调用所引用之前,不会发生实例化。
private DotNetSigleton(){} public static DotNetSigleton Instance
{
get
{
return instance;
}
}
}

最新文章

  1. leanote个人版安装
  2. 图文介绍如何在Eclipse统计代码行数
  3. clearfix清除浮动
  4. SparkSQL DataFrames操作
  5. protobuf
  6. ADO.net 实体类 、数据访问类
  7. RecyclerView(4)简单示例
  8. STL——静态常量整数成员在class内部直接初始化
  9. celery 使用multiprocessing 问题记录
  10. Android 之http编程
  11. HDU1081 最大字段和 压缩数组
  12. head first python菜鸟学习笔记(第四章)
  13. Python内置函数(40)——dir
  14. 去除菜单项的加速键--‘&amp;’符号
  15. 4--TestNG测试报告
  16. Java删除文件夹和其子文件、文件的拷贝和剪切
  17. zoj3956(Course Selection System)_Solution
  18. kraken-ejs创建一个项目【学习札记】
  19. [JSOI2007]文本生成器(AC自动机,DP)
  20. 基于单个 div 的 CSS 绘图

热门文章

  1. strstr()
  2. 改变字典内的value
  3. win7下virtualbox装linux共享win7文件问题(已测试可用)
  4. C++ 模板双向不循环链表!!
  5. Linux shell的标准输入、输出和错误
  6. C++中的异常处理(一)
  7. Java基础—ClassLoader的理解
  8. editplus快速定位到文章头部和尾部
  9. cf.VK CUP 2015.B.Mean Requests
  10. [Effective JavaScript 笔记]第31条:使用Object.getPrototypeOf函数而不要使用__proto__属性