看起来这个重载的构造函数本身就是一个接口,创建一个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)
此号的默认构造函数是简单地使用连接字符串便利foo的app.config.没有什么可以阻止创建这个类的多个实例,但如果使用默认构造函数创建它们,它们将连接到同一个数据库(但不一定共享相同的连接).
这样做的一个原因是conn属性是readonly- 它必须由构造函数初始化(并且在构造函数完成后不能更改),因此默认构造函数尝试从一个有意义的设置初始化它,而不是将其设置为null或string.Empty.
不,任何适当的单身人士都应该有一个受保护的构造函数.
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)