Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/299.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 试图了解在这种情况下static是如何工作的_C#_.net_Oop - Fatal编程技术网

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中