C# 实用功能静态方法/静态类/单例模式

标签 c# singleton static-methods

我正在实用程序类中创建实用程序方法 GetServiceTicketNumber(),因为该方法会经常使用,所以我不想每次都实例化,所以我创建了 方法 & _ticket 为静态。

UtilityManager 也包含其他几个方法。

我的问题是:

1) 这是实现功能的正确方法吗?

2) 是否使 UtilityManager 也成为静态类?这有什么区别?

3) 下面的代码(用于 TicketProvider 功能)是否以单例模式编写? (考虑到大多数单例类实例化同一个类 UtilityManager。)

其他信息:在 Asp.Net 应用程序中调用的类

public  sealed class UtilityManager
{    
    public static readonly TicketProvider _ticket = new TicketProvider();

    public static int GetServiceTicketNumber()
    {       
        return _ticket.GetTicket();
    }
}

最佳答案

1:听起来可行;通常这是一个主观的电话;例如,如果您的实用程序依赖于静态字段,这将限制您对每个 AppDomain 进行一次设置。这可能很好,但如果您以后转向 Multi-Tenancy ,可能会受到限制。它也可能更难测试。

2:静态类不能有实例(或实例方法);如果方法都是静态实现的,那么它可能应该是一个静态类

3:在这里我看不出单例比静态有什么好处。如果您需要将 is 视为一个实例,例如实现一个接口(interface),则单例很有用。

此处的另一个选择可能是常规实例,但只需确保您的所有代码都与同一个实例对话——可能通过 IoC/DI(也可能不是)。这将为您提供类似的便利,但在测试和 Multi-Tenancy 方面具​​有更大的灵 active

作为旁注,您可能还需要考虑线程 的影响,尤其是在网络应用程序(高度线程化)中。共享数据(包括静态字段和共享实例)应正确同步(或不可变)。

关于C# 实用功能静态方法/静态类/单例模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6084870/

相关文章:

java - 访问Java中静态方法所在类的类型

Python 装饰器作为静态方法

c# - HasNoDiscriminator 在 EFCore 中的使用

c# - Antlr4 C# 应用程序教程/示例

c# - 这是从 DataContext 更新实体的最佳方式吗?

singleton - "Singleton"工厂,好还是坏?

c++ - 这是一个有效的单例类吗

javascript - 这是单例模式吗

c++ - 有什么比使用静态整数更好的存储信息的方法? C++

c# - 如何在同一中继器中的另一个 <td> 中的中继器中访问 <td> 内的标签