2020-07-02 - C#单例

C#单例模式

使用懒加载模式创建, 写法比较优雅.
private static readonly Lazy _instance = new Lazy(
            () =>
            {
                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; }
        }

你可能感兴趣的:(2020-07-02 - C#单例)