gpt4 book ai didi

c# - 单例类的两个实例是否具有相同的属性值?

转载 作者:行者123 更新时间:2023-11-30 19:23:53 25 4
gpt4 key购买 nike

我是 C# 设计模式的新手。谁能给我一些关于单例类实现的说明。我刚刚实现了一个教程,但我无法理解单例类的使用与这个“单例意味着我们只能创建一个类的一个实例”。那么为什么我们不使用类的两个不同实例访问在单例类中编写的属性。

请查看我的代码,并就我所犯的错误给予指示。

static void Main(string[] args)
{

Singleton instance = Singleton.getInstance();
instance.Message = "Text Message";

Singleton instance1 = Singleton.getInstance();
Console.WriteLine(instance.Message);
Console.WriteLine(instance1.Message);
Console.ReadKey();
}

class Singleton
{
private static Singleton singleton=null;
private Singleton(){}
public static Singleton getInstance()
{
if (singleton!=null)
{
return singleton;
}
return new Singleton();
}
public string Message{get; set;}
}

最佳答案

您的单例不正确。更正确的版本:

class Singleton
{
private static Singleton singleton = null;
private Singleton(){}
public static Singleton getInstance()
{
if (singleton!=null)
{
return singleton;
}
return (singleton = new Singleton()); //here is
}
public string Message{get; set;}
}

非常好的解决方案:

class Singleton
{
private static Lazy<Singleton> singleton = new Lazy<Singleton>(()=> new Singleton());
private Singleton() { }
public static Singleton getInstance()
{
return singleton.Value;
}
public string Message { get; set; }
}

它在线程安全和惰性初始化方面没有问题。

By default, all public and protected members of the Lazy class are thread safe and may be used concurrently from multiple threads. These thread-safety guarantees may be removed optionally and per instance, using parameters to the type's constructors.

关于c# - 单例类的两个实例是否具有相同的属性值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44225076/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com