这是一个单身人士模式

why*_*heq 0 c#

看起来这个重载的构造函数本身就是一个接口,创建一个Singleton模式 - 这是发生了什么?

这是一个常见的构造函数成语C#吗?

class clDBaccess
{

  // private field
  private readonly string conn;


  public clDBaccess()
    : this(ConfigurationManager.ConnectionStrings["foo"].ConnectionString)
  {
  }
  public clDBaccess(string connectionString)
  {
    this.conn = connectionString;
  }
  ...
  ...
Run Code Online (Sandbox Code Playgroud)

zzz*_*Bov 8

Singleton模式具有构造函数被调用一次.这只是方法重载,以便为无参数构造函数提供良好的默认值.

您可以调用构造函数并根据需要创建任意数量的实例,因此它不是单例.


Dan*_*eld 6

此号的默认构造函数是简单地使用连接字符串便利fooapp.config.没有什么可以阻止创建这个类的多个实例,但如果使用默认构造函数创建它们,它们将连接到同一个数据库(但不一定共享相同的连接).

这样做的一个原因是conn属性是readonly- 它必须由构造函数初始化(并且在构造函数完成后不能更改),因此默认构造函数尝试从一个有意义的设置初始化它,而不是将其设置为null或string.Empty.


Eri*_*ric 6

不,任何适当的单身人士都应该有一个受保护的构造函数.

using System;

public class Singleton
{
   private static Singleton instance;

   private Singleton() {}

   public static Singleton Instance
   {
      get 
      {
         if (instance == null)
         {
            instance = new Singleton();
         }
         return instance;
      }
   }
}
Run Code Online (Sandbox Code Playgroud)

  • 我发现有趣的是你提到了"受保护的构造函数"的必要性,然后使用"私有构造函数". (3认同)
  • 私人只是受保护而不是受保护.两者仍然受到保护. (3认同)