试着理解静态在这种情况下是如何工作的

时间:2012-07-17 16:42:33

标签: c# .net oop

我正在查看同事编写的一些代码以及我预期会发生的代码。这是代码:

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属性,依此类推?

2 个答案:

答案 0 :(得分:12)

  

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

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

由于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; 

答案 1 :(得分:0)

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

所以它不会允许你执行此操作SingletonClass.Instance.Instance,因为SingletonClass.Instance正在返回SingletonClass的实例

这样做可以帮助您避免这样做SingletonClass _instance = new SingletonClass();  在此SingletonClass.Instance.Instance