可以在没有私有构造函数的情况下制作单例吗?

Dev*_*emi 1 c# singleton

    private static PostalCodeInfoTable postalCodeInfoTable = new PostalCodeInfoTable();

    public static PostalCodeInfoTable GetInstance() { return postalCodeInfoTable; }


    public PostalCodeInfoTable()
    {
        db = new GetConnectionString());
    }
Run Code Online (Sandbox Code Playgroud)

我使用GetInstance()创建一个PostalCodeInfoTable,然后我使用一个成员函数来加载我在这里没有显示的一些数据,然后我再次使用GetInstance,然后数据已经预先加载,所以看起来我们有一个单例,但我理论上混淆了为什么我们可以用公共构造函数来做这件事

Zzz*_*Zzz 7

没有私有构造函数就无法构建单例!

如果一个类有一个公共构造函数,那么任何人都可以随时创建它的一个实例,这将使它不是一个单例.

为了使它成为单身人士,只能有一个实例.

来自维基百科

单例模式的实现必须:

  1. 确保只存在单例类的一个实例;
  2. 并提供对该实例的全局访问.

通常,这通过以下方式完成:

  1. 声明该类的所有构造函数都是私有的;
  2. 并提供一个静态方法,返回对实例的引用.