Singleton和Static class c#的实际使用情况

时间:2014-05-12 19:38:58

标签: c# singleton static-class

首先,我不想知道单例和静态类之间的区别。 我想知道人们何时应该使用单身类和静态类。

在我的应用程序中,我使用静态类作为助手或实用程序方法,并使用单例进行数据库连接和错误记录器类。但是在静态类的帮助下可以用来返回sql db连接对象以及错误记录系统。

我真的很想知道其他高级开发人员在哪里使用单例类,他们使用静态类。

如果有人用样本情况和示例代码讨论这个问题,那将非常有用。谢谢

3 个答案:

答案 0 :(得分:1)

如果要创建松散耦合的系统,那么就无法使用静态类(因为它们无法实现抽象而无法注入)。静态类也非常难以模拟,因此如果您正在进行TDD或简单的单元测试,那么它不是您的选择。所以,我只将它们用于与业务需求无关的依赖项,不应该被模拟。例如。记录或映射等基础结构逻辑。

如果我不能扩展现有的类,但我想使用类似于成员的API,我也会使用静态类作为扩展方法。通常,这也是与基础架构相关的扩展,例如映射或序列化,它们不包含业务逻辑。

答案 1 :(得分:0)

我在创建数据库访问对象时通常使用单例类。我可以在应用程序内的任何位置拥有对象的实例。

我通常远离静态类,除了加载特定资产时偶尔使用的加载器类。

答案 2 :(得分:0)

一个非常广泛的问题,但会给你第一个使用Singleton的问题。

当您需要管理某些缓存对象的生命周期时,Singleton比专用静态类更合适。当您想要刷新状态而不必担心线程安全时,单身人士是完美的,例如,如果您有一个被用作单例的类,并且它有许多缓存属性或传入请求可能需要访问的列表。

Refresh()方法可以简单地将当前实例设置为新实例,而不必刷新类的各个属性:

private static YourClass instance = new YourClass();  // first instance

public static void Refresh(){
    instance = new YourClass();  // creates a new, refreshed instance while not needing to worry about thread safety
}

public static YourClass Instance{
      get{
         return instance;
      }
}