【问题标题】:Trying to understand how static is working in this case试图了解在这种情况下静态是如何工作的
【发布时间】:2012-07-16 15:27:30
【问题描述】:

我正在查看一位同事编写的一些代码,而我期望发生的不是。代码如下:

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 属性等等等等?

【问题讨论】:

    标签: c# .net oop


    【解决方案1】:

    如果 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; 
    

    【讨论】:

      【解决方案2】:

      在代码中,您将通过 Instance 返回一个 SingletonClass 的实例,该实例是 Singleton 类型的静态

      所以它不允许你这样做SingletonClass.Instance.Instance,因为SingletonClass.Instance 正在返回SingletonClass 的实例

      它所做的只是让你免于这样做SingletonClass _instance = new SingletonClass(); 进入这个SingletonClass.Instance.Instance

      【讨论】:

        猜你喜欢
        • 2020-08-20
        • 1970-01-01
        • 1970-01-01
        • 2023-03-24
        • 2016-12-05
        • 1970-01-01
        • 2021-05-25
        • 1970-01-01
        • 2018-06-16
        相关资源
        最近更新 更多