我认为单身人士的观点是我一次只能初始化一个实例?如果这是正确的,那么我必须在我的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; } }
}
}
答案 0 :(得分:8)
事实上,这里只有一个实例。你得到2个指针
Singleton t = Singleton.Instance; //FIRST POINTER
t.MyProperty = "Hi";
Singleton t2 = Singleton.Instance; //SECOND POINTER
t2.MyProperty = "Hello";
但他们都指向相同的内存位置。
答案 1 :(得分:3)
尝试
Console.WriteLine("{0}, {1}", t.MyProperty, t2.MyProperty);
刚刚测试了您的代码,它提供了Hello Hello
而不是Hi Hello
。所以你在操纵同一个实例
答案 2 :(得分:1)
您对<{1}}的引用是对Singleton.Instance;
的引用,因此对单个对象有所影响。没有创建第二个Singleton 对象