单例模式 - 对象的创建

3

我正在了解单例模式。这里有一小段代码:

Program.cs:

class Program
{
    static void Main(string[] args)
    {
        SingleObject objtemp = SingleObject.getInstance();\
        objtemp.showMessage();
    }
}

SingleObject.cs

class SingleObject
{
    static SingleObject obj = new SingleObject();

    private SingleObject()
    {
    }

    public static SingleObject getInstance()
    {
        return obj;
    }

    public void showMessage()
    {
        Console.WriteLine("Hello Message");
    }
}

我无法理解是什么在调用SingleObject()构造函数? 当我调用getInstance()方法时,它是否正确返回实例?


2
最好的学习单例模式的方法是阅读这篇文章:http://csharpindepth.com/Articles/General/Singleton.aspx - Kevin Avignon
静态成员在您首次使用/触摸/访问静态类时会自动初始化。 - Chris
静态单例对象 obj = new SingleObject(); // 这是一个字段。字段初始化发生在类被运行环境使用之前(实现定义的某个时间)。编辑:我认为这可能会有问题(从字段初始化器调用构造函数)——构造函数可以假定所有字段都已经被初始化,但如果您有更多的字段需要在“obj”之后初始化,那么情况就不同了——它们按照声明的顺序进行初始化。 - ABuckau
2个回答

0
基本思路是将构造函数设为私有。这样,你就无法从外部初始化SingleObject的对象。但是,在类内部创建的静态对象可以使用私有构造函数,让你可以通过公共方法从外部访问它。

0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接