C# 试图了解在这种情况下static是如何工作的
我正在看一个同事写的一些代码,而我预期会发生的事情并不是这样。代码如下:C# 试图了解在这种情况下static是如何工作的,c#,.net,oop,C#,.net,Oop,我正在看一个同事写的一些代码,而我预期会发生的事情并不是这样。代码如下: public class SingletonClass { private static readonly SingletonClass _instance = new SingletonClass(); public static SingletonClass Instance { get { return _instance; } } private Sin
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属性,以此类推
因为您只能通过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;
在代码中,通过实例返回
SingletonClass
的实例,该实例是Singleton类型的静态实例
因此它不允许您执行此操作,因为SingletonClass.Instance.Instance
正在返回SingletonClass.Instance
的实例
它所做的一切就是避免您这样做SingletonClass\u instance=new SingletonClass()代码>
在这个SingletonClass.Instance.Instance中