我正在查看同事编写的一些代码以及我预期会发生的代码。这是代码:
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
属性,依此类推?
答案 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