6

私は同僚が書いたいくつかのコードを見ていますが、私が期待していたことはそうではありません。コードは次のとおりです。

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;

そして、そのクラスの同じインスタンスを参照します。何が起こるか私は1つしか持つことができません.Instance。私が予期していなかった何か。Instanceプロパティがクラスを返す場合、その返されたSingletonClassクラスなどでプロパティを呼び出せないのはなぜInstanceですか?

4

2 に答える 2

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; 
于 2012-07-17T16:45:24.263 に答える
0

SingletonClassコードでは、シングルトンタイプの静的なインスタンスを介してのインスタンスを返しています

したがって、はのインスタンスを返すSingletonClass.Instance.Instanceため、これを行うことはできません。SingletonClass.InstanceSingletonClass

SingletonClass _instance = new SingletonClass(); それがしているのは、これをこれに行うことからあなたを救うことですSingletonClass.Instance.Instance

于 2012-07-17T16:48:23.500 に答える