【发布时间】:2018-09-05 20:53:03
【问题描述】:
我正在学习C#中的Singleton设计模式,我已经用两种方式编写了下面的代码,我想知道哪种方式是创建Singleton类的正确方法:
public sealed class TranslationHelper
{
// first way
private static readonly TranslationHelper translationHelper = new TranslationHelper();
// second way
public static readonly TranslationHelper translationHelpers = new TranslationHelper(); // Direct call
public static TranslationHelper GetTranslationHelper()
{
return translationHelper;
}
private TranslationHelper()
{
}
}
打电话:
TranslationHelper instance = TranslationHelper.GetTranslationHelper();
TranslationHelper ins = TranslationHelper.translationHelpers;
我是初学者,所以我不确定这两种方法是否相同。请指导我。
【问题讨论】:
-
有史以来最好的指南,作者是@JonSkeet:csharpindepth.com/Articles/General/Singleton.aspx。读完你就会明白两者都是错误的
-
区别(除了名称)在
public和private之间。通常,您几乎从不想拥有public字段——您应该改用publicproperty。至于单例题,其他cmet有设计模式的资源。 -
@JoeSewell:感谢您的意见,请您也添加一行解释。
-
@CamiloTerevinto 现在你让我好奇了。在静态构造函数中初始化也是错误的吗?静态构造函数仅在使用类时调用,.net 保证它只运行一次。 (即线程安全)
标签: c# .net design-patterns