试图了解静态在这种情况下的工作

试图了解静态在这种情况下的工作

问题描述:

我正在看一些同事编写的代码,而我期望发生的不是。下面是代码:试图了解静态在这种情况下的工作

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

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

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

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

哦,对了,现在是有道理这样做SingletonClass _instance = new SingletonClass(); 节省您的一个实例。 – Justin 2012-07-17 16:47:20

在代码中,你正在返回SingletonClass的一个实例,它是静态的单例实例

所以它不会允许你这样做SingletonClass.Instance.Instance b ecause的SingletonClass.Instance正在返回的SingletonClass

所有它做的是从这个SingletonClass.Instance.Instance