class Person
{
public string Name { get; set; }
//1. 私有化构造函数
//2. 提供1个私有的静态的Person类型的变量
//3. 提供1个公共的静态的方法 用于返回上面的变量.
private static Person p;
public static Person GetSingle()
{
if (p == null)
{
p = new Person();
}
return p;
}
private Person()
{
}
}
双重锁机制,保证线程安全
namespace Singleton
{
public class Singleton
{
//定义一个私有的静态全局变量来保存该类的唯一实例
private static Singleton singleton;
//定义一个只读静态对象
//且这个对象是在程序运行时创建的
private static readonly object syncObject = new object();
///
/// 构造函数必须是私有的
/// 这样在外部便无法使用 new 来创建该类的实例
///
private Singleton()
{ }
///
/// 定义一个全局访问点
/// 设置为静态方法
/// 则在类的外部便无需实例化就可以调用该方法
///
///
public static Singleton GetInstance()
{
//这里可以保证只实例化一次
//即在第一次调用时实例化
//以后调用便不会再实例化
//第一重 singleton == null
if (singleton == null)
{
lock (syncObject)
{
//第二重 singleton == null
if (singleton == null)
{
singleton = new Singleton();
}
}
}
return singleton;
}
}
}