Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/314.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 单例和静态c类的实际使用#_C#_Singleton_Static Class - Fatal编程技术网

C# 单例和静态c类的实际使用#

C# 单例和静态c类的实际使用#,c#,singleton,static-class,C#,Singleton,Static Class,首先,我不想知道单例类和静态类之间的区别。 我想知道人们什么时候应该使用单例类,什么时候应该使用静态类 在我的应用程序中,我使用静态类作为助手或实用程序方法,使用singleton作为db连接和错误记录器类。但在静态类的帮助下,可以用来返回sql db连接对象以及错误记录系统 我真的很想知道其他高级开发人员在哪里使用单例类,在哪里使用静态类 如果有人用示例情况和示例代码讨论这个问题,这将非常有帮助。感谢如果您正在创建松散耦合的系统,那么您就无法使用静态类(因为它们无法实现抽象,也无法注入)。静态

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

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

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


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

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


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

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


我通常远离静态类,静态类是加载特定资产时偶尔使用的加载程序类的例外。

这是一个非常广泛的问题,但会告诉您我想到的第一个使用
单例的原因

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

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;
      }
}