我最近了解了Singleton模式,我对此有疑问:
鉴于以下单身人士:
public class Singleton
{
private static readonly Lazy<Singleton> lazyInstance =
new Lazy<Singleton>(() => new Singleton(), true);
private Singleton()
{
// Stuff that must only happen once.
Console.WriteLine("Single ctor");
}
public static Singleton Instance => lazyInstance.Value;
public static void DoSomething()
{
Console.WriteLine("Hello world!");
}
public string Name { get; set; }
}
以及居住在同一个程序集中的以下客户端:
public class ClientA
{
public ClientA
{
var instance = Singleton.Instance;
}
}
public class ClientB
{
public ClientB
{
var instance = Singleton.Instance;
}
}
两个客户端最终都会使用相同的Singleton实例吗?
我的真实世界示例要复杂得多,并且有一些长时间运行的操作会在它的第一次实例化期间填充单例类中的某些属性,并且我想确保使用此单例的所有客户端都在使用相同的实例,以便长时间运行的操作只运行一次。
注意: 在我的真实世界示例中,客户端类已经从我无法控制的基类派生。
答案 0 :(得分:1)
new Lazy(()=&gt; new Singleton(),true)只执行一次。实例始终返回相同的实例。