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

  • 精简实现、线程安全:C#通用单例泛型基类助你轻松创建单例模式已关闭评论
  • 40 次浏览
  • A+
所属分类:.NET技术
摘要

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

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

 

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

优点:

  1. 线程安全: 使用Lazy<T>确保了线程安全的延迟初始化,避免了在多线程环境下可能导致的竞态条件问题。
  2. 泛型通用性: 通过泛型参数,该单例基类适用于任何类,提高了代码的通用性和可重用性,避免了为每个类都实现单例模式的重复劳动。
  3. 简化实现: 泛型和Lazy<T>的使用简化了单例模式的实现。派生类只需继承这个基类,即可获得单例模式的特性,减少了冗余的代码。
  4. 延迟加载: 通过延迟加载的特性,实例在第一次被请求时才被创建,提高了性能,避免了不必要的资源浪费。

以下是一个线程安全的通用单例泛型基类的C#实现:

using System;  // 泛型单例基类 public class Singleton<T> where T : class {     // 使用Lazy<T>确保线程安全的延迟初始化     private static readonly Lazy<T> instance = new Lazy<T>(() => CreateInstanceOfT(), isThreadSafe: true);      // 提供获取单例实例的静态属性     public static T Instance => instance.Value;      // 保护的构造函数,防止直接实例化     protected Singleton()     {         // 在此处可以添加其他初始化逻辑     }      // 创建T类型的实例     private static T CreateInstanceOfT()     {         return Activator.CreateInstance(typeof(T), true) as T;     } }  // 示例类 public class MySingletonClass : Singleton<MySingletonClass> {     // 在此处可以添加其他成员或方法     private MySingletonClass()     {         // 在此处可以添加初始化逻辑     } }  class Program {     static void Main()     {         // 使用单例实例         MySingletonClass instance1 = MySingletonClass.Instance;         MySingletonClass instance2 = MySingletonClass.Instance;          // 验证是否为同一实例         Console.WriteLine($"instance1 == instance2: {instance1 == instance2}");          // 可以在这里添加其他业务逻辑...     } }

上面的Singleton<T>为通用型,在没有应用其它容器进行单例注册时这种方法还是比较简单方便的。

 

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