private static PostalCodeInfoTable postalCodeInfoTable = new PostalCodeInfoTable();
public static PostalCodeInfoTable GetInstance() { return postalCodeInfoTable; }
public PostalCodeInfoTable()
{
db = new GetConnectionString());
}
我使用GetInstance()创建一个PostalCodeInfoTable,然后我使用一个成员函数来加载我在这里没有显示的数据,然后我再次使用GetInstance然后数据已经预先加载,所以它似乎我们有一个单身,但我理论上混淆了为什么我们可以用公共构造函数做到这一点
答案 0 :(得分:6)
如果没有私有构造函数,就无法生成单例!
如果一个类有一个公共构造函数,那么任何人都可以随时创建它的一个实例,这将使它不是一个单例。
为了使它成为单身人士,只能有一个实例。
单例模式的实现必须:
- 确保只存在单例类的一个实例;
- 并提供对该实例的全局访问权。
醇>通常,这可以通过以下方式完成:
- 声明该类的所有构造函数都是私有的;
- 并提供一个返回对实例的引用的静态方法。
醇>
答案 1 :(得分:2)
答案 2 :(得分:1)
您在此处创建的是一个静态变量(PostalCodeInfoTable.postalCodeInfoTable),只能通过静态方法(PostalCodeInfoTable.GetInstance())进行访问。
PostalCodeInfoTable实例由TypeConstructor创建,在运行时常量声明之外很少使用。
公共构造函数?那一个是完全无关紧要的。我不确定它有什么用途。它不会影响静态字段的内容。事实上,它所做的就是打破单一模式:
var temp1 = PostalCodeInfoTable.GetInstance();
var temp2 = new PostalCodeInfoTable();
//This will return false, as they are not the same instances
object.ReferenceEquals(temp1, temp2);
答案 3 :(得分:1)
单例模式的实现必须:
通常,这可以通过以下方式完成:
实例通常存储为私有静态变量;在初始化变量时,在首次调用静态方法之前的某个时刻创建实例。
正确的例子:
public class PostalCodeInfoTable{
//.........
private static PostalCodeInfoTable Instance = new PostalCodeInfoTable();
private PostalCodeInfoTable() {
db = new GetConnectionString();
}
public static PostalCodeInfoTable GetInstance() {
return Instance;
}
}