110,528
社区成员
发帖
与我相关
我的任务
分享
/// <summary>
/// 泛型单例基类
/// </summary>
public abstract class Singleton<TEntity> where TEntity : class
{
private static readonly Lazy<TEntity> _instance
= new Lazy<TEntity>(() =>
{
var ctors = typeof(TEntity).GetConstructors(
BindingFlags.Instance
| BindingFlags.NonPublic
| BindingFlags.Public);
if (ctors.Count() != 1)
throw new InvalidOperationException(String.Format("Type {0} must have exactly one constructor.", typeof(TEntity)));
var ctor = ctors.SingleOrDefault(c => !c.GetParameters().Any() && c.IsPrivate);
if (ctor == null)
throw new InvalidOperationException(String.Format("The constructor for {0} must be private and take no parameters.", typeof(TEntity)));
return (TEntity)ctor.Invoke(null);
}, true);
public static TEntity Instance
{
get { return _instance.Value; }
}
}
每个继承此类的类需提供默认无参私有构造函数...public class B: A
{
......
}
那么 A 是不是单例,好不需要去纠结。
如果你偏要说“论怎么使用这个B类,A类都可以被实例化。。。。”那就是自己把自己绕八股了。