这是一个单身人士模式

时间:2016-03-29 17:55:15

标签: 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;
  }
  ...
  ...

5 个答案:

答案 0 :(得分:8)

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

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

答案 1 :(得分:6)

没有。这里的默认构造函数只是方便使用foo中的连接字符串app.config。没有什么能阻止创建这个类的多个实例,但如果使用默认构造函数创建它们,它们将连接到同一个数据库(但不一定共享相同的连接)。

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

答案 2 :(得分: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;
      }
   }
}

答案 3 :(得分:3)

“Singleton”意味着只能有一个类的实例。通常,您会找到一个DropDownList属性,该属性返回该类的单个实例。

为确保不能多次实例化类,构造函数通常是私有的。

这不是这种情况。它是一个带有两个构造函数的普通类,其中无参数构造函数“重定向”到具有有用默认值的首选构造函数。

答案 4 :(得分:1)

不,它不适合单身人士模式。构造函数需要是私有的,以便对象实例化由类本身控制。

例如:

public class Singleton  
{
    private Singleton()
    {
    }
    private static Singleton instance = new Singleton();
    public static Singleton Instance
    {
        get
        {
            return instance;
        }
    }
}