2

我认为单例的意义是我一次只能初始化一个实例?如果这是正确的,那么我的 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

事实上,这里只有一个实例。你得到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 Hello而不是Hi Hello. 所以你在操作同一个实例

于 2012-09-25T11:08:30.720 回答
1

实际上,您的示例程序中只有一个实例。变量 t1 和 t2 指向对象的同一个实例。您创建的对象是

private static readonly Singleton instance = new Singleton();

并且 t1 和 t2 都指向同一个对象。正如内存中的其他人所说,只创建了一个对象。

于 2012-09-25T11:07:37.303 回答
1

您的引用是对单个对象Singleton.Instance;的引用Singleton.instance,因此是对单个对象的引用。没有创建第二个 Singleton对象

于 2012-09-25T11:07:48.083 回答