试图了解静态在这种情况下的工作
问题描述:
我正在看一些同事编写的代码,而我期望发生的不是。下面是代码:试图了解静态在这种情况下的工作
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;
答
在代码中,你正在返回SingletonClass
的一个实例,它是静态的单例实例
所以它不会允许你这样做SingletonClass.Instance.Instance
b ecause的SingletonClass.Instance
正在返回的SingletonClass
所有它做的是从这个SingletonClass.Instance.Instance
哦,对了,现在是有道理这样做
SingletonClass _instance = new SingletonClass();
节省您的一个实例。 – Justin 2012-07-17 16:47:20