2

シングルトンのポイントは、一度に1つのインスタンスしか初期化できないということだと思いましたか?これが正しければ、C#コンソールアプリケーションコードに障害があるはずです(以下を参照)。

シングルトンについての私の理解が正しいかどうか、または私のコードにエラーがあるかどうかを教えてください。

using System;
using System.Collections.Generic;
using System.Text;

namespace TestSingleton
{
    class Program
    {
        static void Main(string[] args)
        {
            Singleton t = Singleton.Instance;
            t.MyProperty = "Hi";

            Singleton t2 = Singleton.Instance;
            t2.MyProperty = "Hello";

            if (t.MyProperty != "")
                Console.WriteLine("No");

            if (t2.MyProperty != "")
                Console.WriteLine("No 2");

            Console.ReadKey();
        }
    }

    public sealed class Singleton
    {
        private static readonly Singleton instance = new Singleton();

        public string MyProperty { get; set; }

        private Singleton()
        {}

        static Singleton()
        { }

        public static Singleton Instance { get { return instance; } }
    }
}
4

4 に答える 4

8

実際、ここにはインスタンスが1 つしかありません。2つのポインターを取得します

Singleton t = Singleton.Instance; //FIRST POINTER
t.MyProperty = "Hi";

Singleton t2 = Singleton.Instance; //SECOND POINTER
t2.MyProperty = "Hello";

しかし、どちらも同じメモリ位置を指しています。

于 2012-09-25T11:05:51.580 に答える
3

試す

Console.WriteLine("{0}, {1}", t.MyProperty, t2.MyProperty);

コードをテストしたところHello HelloHi Hello. したがって、同じインスタンスを操作していました

于 2012-09-25T11:08:30.720 に答える
1

実際、サンプル プログラムにはインスタンスが 1 つしかありません。変数 t1 と t2 は、オブジェクトのまったく同じインスタンスを指しています。作成したオブジェクトは

private static readonly Singleton instance = new Singleton();

また、t1 と t2 の両方が同じオブジェクトを指しています。メモリ内の他の誰かが言ったように、作成されたオブジェクトは 1 つだけです。

于 2012-09-25T11:07:37.303 に答える
1

あなたの参照Singleton.Instance;は参照でありSingleton.instance、単一のオブジェクトへの参照です。2 番目の Singletonオブジェクトの作成はありません

于 2012-09-25T11:07:48.083 に答える