精简实现、线程安全:C#通用单例泛型基类助你轻松创建单例模式 ...

打印 上一主题 下一主题

主题 904|帖子 904|积分 2712

 
概述:该通用单例泛型基类使用C#实现,线程安全,通过泛型参数和Lazy实现简化的单例模式。优点包括线程安全、泛型通用性、简化实现、以及延迟加载的特性。
优点:

  • 线程安全: 使用Lazy确保了线程安全的延迟初始化,避免了在多线程环境下大概导致的竞态条件问题。
  • 泛型通用性: 通过泛型参数,该单例基类适用于任何类,提高了代码的通用性和可重用性,避免了为每个类都实现单例模式的重复劳动。
  • 简化实现: 泛型和Lazy的使用简化了单例模式的实现。派生类只需继承这个基类,即可获得单例模式的特性,减少了冗余的代码。
  • 延迟加载: 通过延迟加载的特性,实例在第一次被请求时才被创建,提高了性能,避免了不必要的资源浪费。
以下是一个线程安全的通用单例泛型基类的C#实现:
  1. using System;
  2. // 泛型单例基类
  3. public class Singleton<T> where T : class
  4. {
  5.     // 使用Lazy<T>确保线程安全的延迟初始化
  6.     private static readonly Lazy<T> instance = new Lazy<T>(() => CreateInstanceOfT(), isThreadSafe: true);
  7.     // 提供获取单例实例的静态属性
  8.     public static T Instance => instance.Value;
  9.     // 保护的构造函数,防止直接实例化
  10.     protected Singleton()
  11.     {
  12.         // 在此处可以添加其他初始化逻辑
  13.     }
  14.     // 创建T类型的实例
  15.     private static T CreateInstanceOfT()
  16.     {
  17.         return Activator.CreateInstance(typeof(T), true) as T;
  18.     }
  19. }
  20. // 示例类
  21. public class MySingletonClass : Singleton<MySingletonClass>
  22. {
  23.     // 在此处可以添加其他成员或方法
  24.     private MySingletonClass()
  25.     {
  26.         // 在此处可以添加初始化逻辑
  27.     }
  28. }
  29. class Program
  30. {
  31.     static void Main()
  32.     {
  33.         // 使用单例实例
  34.         MySingletonClass instance1 = MySingletonClass.Instance;
  35.         MySingletonClass instance2 = MySingletonClass.Instance;
  36.         // 验证是否为同一实例
  37.         Console.WriteLine($"instance1 == instance2: {instance1 == instance2}");
  38.         // 可以在这里添加其他业务逻辑...
  39.     }
  40. }
复制代码
上面的Singleton为通用型,在没有应用其它容器进行单例注册时这种方法照旧比较简单方便的。
 



免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

慢吞云雾缓吐愁

金牌会员
这个人很懒什么都没写!
快速回复 返回顶部 返回列表