【发布时间】:2016-06-25 02:17:44
【问题描述】:
我最近了解了单例模式,对此我有一个疑问:
给定以下单例:
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 实例吗?
我的真实示例要复杂得多,并且有一些长时间运行的操作会在单例类的第一次实例化期间填充一些属性,我想确保所有使用这个单例的客户端都使用同一个实例,所以长时间运行的操作只会运行一次。
注意: 在我的真实示例中,客户端类已经派生自我无法控制的基类。
【问题讨论】:
-
如果它有多个实例,那么它不再是单例(根据定义)。
-
您认为为什么会创建多个实例?