C# 使用函数获取实例而不是 "new"

C# Using a function to get instance instead of "new"

习惯了一些新代码并有一个问题。总而言之,我看到了以下内容

file1.cs :

MyClass myInstance = MyClass.Instance();

...然后在 MyClass 的定义中有...

MyClass.cs :

public class MyClass {

   // etc. etc.

   static readonly MyClass _instance = new MyClass();

   public static MyClass Instance() {
      return _instance;
   }

   // etc. etc.

}

这样做的原因是什么而不是 file1.cs:

MyClass myInstance = new MyClass();

?

因为它使用单吨模式,这就是原因...

阅读:Singleton - 单例模式是一种设计模式,用于确保class只能有一个并发实例。每当需要额外的单例对象 class 时,就会提供先前创建的单实例。

阅读:Singleton with proper example

这是单例模式。这就是为什么使用方法来获取实例的原因。

当我们只想在我们的应用程序中使用 class 的一个实例时,使用单例模式。我们不希望我们应用程序的消费者有权构建多个实例。

关于单例模式的详细说明,请看here

这是一个 "singleton pattern" 你可以在这里阅读 http://csharpindepth.com/Articles/General/Singleton.aspx

这是一个单例模式 有时新实例并不是做某事的最佳方式。

这方面的一个例子是记录器。不需要在每次需要时都实例化记录器,因此单例模式很有用。

关于单身人士的另一种理论...

当您希望应用程序的不同部分共享一个公共对象时,您也可以使用它。有时您可能需要强制将静态class转换为单例,以便您可以使用if进行数据绑定(静态class不能绑定)。

一些与应用程序生命周期一样长的典型单例可以是设置、某种缓存、带有文件观察器的背景文件上传器等...

我建议您使用 属性 而不是函数。它更干净,更方便调试和模拟测试。

请注意,通过使用静态构造函数(正如您已经在做的那样),_instance 的初始化是线程安全的。

注意:其他方法的实现不应该是静态的。

在下面找到单例模式的完整实现:​​

public class MyClass
{

    static MyClass _instance = new MyClass();

    public static MyClass Instance
    {
        get
        {
            return _instance;
        }
        set { _instance = value; }
    }

    public void DoStuff()
    {
         //etc...
    }

    private MyClass()
    {

    }
}

并且您可以这样在其他 类 中使用它:

 MyClass.Instance.DoStuff();