单例模式
3.种比较好的方式:
1.
双重判断避免不必要的加锁
class Class1
{
private static Class1 instance;
private static readonly object objlock = new object();
public Class1 Instance
{
get
{
if (instance == null)
{
lock (objlock)
{
if (instance == null)
{
instance = new Class1();
}
}
}
return instance;
}
}
}
2.利用静态构造函数
public sealed class Singleton4
{
private Singleton4(){}
public static Singleton4 Instance
{
get
{
return Nested.instance;
}
}
// 使用内部类+静态构造函数实现延迟初始化
class Nested
{
static Nested()
{
instance = new Singleton4();
}
internal static readonly Singleton4 instance;
}
}
3.利用反射写一个单例模板
using System.Reflection;
/// <summary>
/// 单件模式模版类
/// </summary>
/// <typeparam name="T">具体的单件类.</typeparam>
public static class Singleton<T> where T : class
{
/// <summary>
/// 单件实例化.
/// </summary>
public static readonly T Instance;
/// <summary>
/// 防止类型的实例.
/// </summary>
static Singleton()
{
Instance = (typeof(T).InvokeMember(typeof(T).Name, BindingFlags.Instance | BindingFlags.NonPublic | BindingFlags.CreateInstance, null, null, null) as T);
}
}

浙公网安备 33010602011771号