6

我正在查看一位同事编写的一些代码,而我期望发生的不是。这是代码:

public class SingletonClass
{
    private static readonly SingletonClass _instance = new SingletonClass();

    public static SingletonClass Instance
    {
        get { return _instance; }
    } 

    private SingletonClass()
    {
        //non static properties are set here
        this.connectionString = "bla"
        this.created = System.DateTime.Now;
    }
}

在另一堂课上,我希望能够做到:

private SingletonClass sc = SingletonClass.Instance.Instance.Instance.Instance.Instance.Instance;

它引用了该类的相同实例。发生的事情是我只能拥有一个.Instance。我没想到的东西。如果该Instance属性返回一个SingletonClass类,为什么我不能Instance在该返回的类上调用该属性等等等等?

4

2 回答 2

12

如果 Instance 属性返回一个 SingletonClass 类,为什么我不能在该返回的类上调用 Instance 属性等等等等?

因为您只能.Instance通过SingletonClass type访问,而不是通过该类型的实例。

由于Instance是静态的,您必须通过以下类型访问它:

SingletonInstance inst = SingletonInstance.Instance; // Access via type

// This fails, because you're accessing it via an instance
// inst.Instance

当您尝试链接这些时,您实际上是在做:

SingletonInstance temp = SingletonInstance.Instance; // Access via type

// ***** BAD CODE BELOW ****
// This fails at compile time, since you're trying to access via an instance
SingletonInstance temp2 = temp.Instance; 
于 2012-07-17T16:45:24.263 回答
0

在代码中,您SingletonClass通过 Instance 返回一个实例,它是 Singleton 类型的静态

所以它不会允许你这样做,SingletonClass.Instance.Instance因为它SingletonClass.Instance正在返回一个实例SingletonClass

它所做的只是让你免于这样SingletonClass _instance = new SingletonClass();SingletonClass.Instance.Instance

于 2012-07-17T16:48:23.500 回答