泛型单例
来源:互联网 发布:华为如何开数据流量 编辑:程序博客网 时间:2024/06/13 04:51
using System;using System.Linq;using System.Reflection;namespace Netson.IHWMS.Desktop{ public abstract class SingleInstance<T> { //线程安全单例 private static readonly object Lock = new object(); private static T _instance; public static T Instance { get { if (_instance != null) return _instance; lock (Lock) { _instance = Single.Value; } return _instance; } } //生成泛型单例 private static Lazy<T> Single { get; } = new Lazy<T>(() => { var ctors = typeof(T).GetConstructors(BindingFlags.Instance | BindingFlags.NonPublic | BindingFlags.Public); if (ctors.Length != 1) { throw new InvalidOperationException($"类型 {typeof(T)} 必须有一个构造函数."); } /* 搜索限定为私有无参数构造 var ctor = ctors.SingleOrDefault(c => !c.GetParameters().Any() && c.IsPrivate); if (ctor == null) { throw new InvalidOperationException($"类型 {typeof(T)} 的构造函数必须为私有或不提供参数."); } */ var ctor = ctors.SingleOrDefault(); if (ctor == null) { throw new InvalidOperationException($"类型 {typeof(T)} 未找到,无法构造."); } return (T)ctor.Invoke(null); }); }}
阅读全文
0 0
- 泛型单例
- 泛型单例
- 泛型单例
- unity泛型单例
- 泛型单例工厂
- Unity泛型单例模式
- C# 简单的泛型单例
- Unity学习日记(十二) C#泛型单例模式
- Post和Get的区别?
- 快速搭建Spring boot CRUD-HelloWorld程序
- 自己电脑配置Oracle WebLogic Server
- 1-2·虚拟机Linux使用、系统安装、分区、挂载
- Android通过USB共享网络
- 泛型单例
- 杂乱无章的小笔记
- 关于大数据和人工智能发展的思考
- 关于std::move和std::forward
- kotlin学習
- 清科2017医美行业研究报告:消费者搅动产业变局
- 如何下载一张北京全景的卫星地图?
- 习题4.2
- 递归调用之斐波那契数列