精简实现、线程安全:C#通用单例泛型基类助你轻松创建单例模式
概述:该通用单例泛型基类使用C#实现,线程安全,通过泛型参数和Lazy<T>实现简化的单例模式。优点包括线程安全、泛型通用性、简化实现、以及延迟加载的特性。
优点:
- 线程安全: 使用Lazy<T>确保了线程安全的延迟初始化,避免了在多线程环境下可能导致的竞态条件问题。
- 泛型通用性: 通过泛型参数,该单例基类适用于任何类,提高了代码的通用性和可重用性,避免了为每个类都实现单例模式的重复劳动。
- 简化实现: 泛型和Lazy<T>的使用简化了单例模式的实现。派生类只需继承这个基类,即可获得单例模式的特性,减少了冗余的代码。
- 延迟加载: 通过延迟加载的特性,实例在第一次被请求时才被创建,提高了性能,避免了不必要的资源浪费。
以下是一个线程安全的通用单例泛型基类的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>为通用型,在没有应用其它容器进行单例注册时这种方法还是比较简单方便的。
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek “源神”启动!「GitHub 热点速览」
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· C# 集成 DeepSeek 模型实现 AI 私有化(本地部署与 API 调用教程)
· DeepSeek R1 简明指南:架构、训练、本地部署及硬件要求
· 2 本地部署DeepSeek模型构建本地知识库+联网搜索详细步骤