【发布时间】:2018-08-17 12:08:22
【问题描述】:
我正在尝试理解 C# 中的单例模式。我为此得到了 1 个结构,但我对实施有一些疑问。由于我是 C# 新手,我想知道它是如何工作的。
public class Class1
{
public static void Main(string[] args)
{
Singleton.Object.Func1();
}
}
public sealed class Singleton
{
private static readonly Singleton _obj = new Singleton();
static Singleton() { } // Make sure it's truly lazy
private Singleton() { } // Prevent instantiation outside
public static Singleton Object { get { return _obj; } }
public void Func1() { }
}
这种模式对于单例类是否正确?
这行“static Singleton() { } // 确保它真的是惰性的”的目的是什么
类如何识别在特定时间只创建一个实例
【问题讨论】:
-
static Singleton() { } // Make sure it's truly lazy没有意义,可以删除。它一无所获。对于 1 - 是的,它是正确的。 还有其他方法可以做到这一点,但这很好。 -
private Singleton() { } // Prevent instantiation outside是如何解决 3 的。由于没有public构造函数,因此没有外部代码可以实例化它。因此它只能是obj之一。 -
static表示该类本身只会为其保存一个变量,因此无论何时/何地抓取它,只要该变量仍然存在,它就会抓取 smae 一个 -
Static keyword in c#的可能重复
-
我推荐你阅读这篇 Jon Skeet 写的关于实现单例模式的文章csharpindepth.com/Articles/General/Singleton.aspx