gpt4 book ai didi

C# 单例模式

转载 作者:行者123 更新时间:2023-11-30 13:57:19 24 4
gpt4 key购买 nike

我在很多地方都使用单例模式,有时构造函数什么都不做,有时它只是初始化一些东西。我想知道是否有一种方法可以设置一个抽象类来稍微减少我的代码重复,即我不需要在每个类中都使用 public static readonly Singleton _Instance = new Singleton();,只有一个基类。我了解接口(interface)不是一种选择。

我试过使用以下内容(取自 here );

public abstract class Singleton<T> where T : new()
{
static Singleton()
{
}

private static readonly T _Instance = new T();

public static T Instance
{
get { return _Instance; }
}
}

问题是我无法在需要初始化的情况下重写构造函数。我正在尝试做的事情有可能吗?还是我应该继续做我正在做的事情而不用担心基础单例类?

最佳答案

I wondered if there was a way to set up an abstract class to minimise my code repetition a bit

不,没有。一旦你有了一个抽象类,你就有了一个可以多次实例化的类。我见过很多人尝试做这样的事情,但最终结果要么不是单例,要么比仅仅做你已经在做的事情更复杂。

Is what I'm trying to do even possible? Or should I just keep doing what I'm doing and not worry about a base singleton class?

您不应该尝试创建基类单例 - 但如果我是您,我会首先尝试停止使用这么多单例。单例模式很容易被过度使用,它无异于一种反模式。看看您是否可以针对依赖注入(inject)进行重构,使用发生的配置只为每个类创建一个实例,但这是配置问题而不是类本身强制执行的问题。

除此之外,涉及单例的单元测试往往很痛苦,仅仅是因为它是全局状态,需要在测试之间清理等等。

关于C# 单例模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21847535/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com