c#用泛型实现一个单例模式基
时间: 2024-10-20 09:13:49 浏览: 24
基于C#的23种设计模式
在 C# 中,可以利用泛型和静态成员来实现一种线程安全的单例模式。这种实现称为"依赖注入式单例"(Dependency Injection Singleton),它既避免了传统单例模式的线程不安全问题,又保持了代码的灵活性。
```csharp
public abstract class SingletonBase<T> where T : new()
{
private static readonly Lazy<T> lazyInstance = new Lazy<T>(() => new T());
public static T Instance => lazyInstance.Value;
}
// 具体实例化某类型的单例
public class ConcreteSingleton : SingletonBase<ConcreteSingleton>
{
// 实现必要的业务逻辑...
}
```
在这个例子中:
1. `SingletonBase` 是一个模板类,`T` 是一个类型参数,它要求传入的类型能够通过 `new()` 构造函数创建一个新的实例。
2. `lazyInstance` 是一个 `Lazy<T>` 对象,它会在第一次请求 `Instance` 时初始化新的实例,并将其缓存起来,之后再请求就会返回相同的实例。
3. `ConcreteSingleton` 是 `SingletonBase` 的具体实现,它是其自身的实例,通过这种方式实现了单例。
阅读全文