C#單例模式
使用懶加載模式創(chuàng)建, 寫法比較優(yōu)雅.
private static readonly Lazy<T> _instance = new Lazy<T>(
() =>
{
var ctors = typeof(T).GetConstructors(BindingFlags.Instance | BindingFlags.NonPublic | BindingFlags.Public);
if (ctors.Count() != 1)
throw new InvalidOperationException(String.Format("Type {0} must have exactly one constructor.", typeof(T)));
var ctor = ctors.SingleOrDefault(c => c.GetParameters().Count() == 0 && c.IsPrivate);
if (ctor == null)
throw new InvalidOperationException(String.Format("The constructor for {0} must be private and take no parameters.", typeof(T)));
return (T)ctor.Invoke(null);
}
);
public static T Instance
{
get { return _instance.Value; }
}