看起来这个重载的构造函数本身就是一个接口,创建一个Singleton模式 - 是发生了什么?
这是C#
中的常见构造函数吗?
class clDBaccess
{
// private field
private readonly string conn;
public clDBaccess()
: this(ConfigurationManager.ConnectionStrings["foo"].ConnectionString)
{
}
public clDBaccess(string connectionString)
{
this.conn = connectionString;
}
...
...
答案 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;
}
}
}