【发布时间】:2019-06-21 13:52:46
【问题描述】:
我在今天的采访中被要求写 Singleton。我写了以下内容,请注意,我使用“属性集”方法进行设置,然后使用“获取”方法返回实例。但是我在互联网上看到他们使用的大多数地方只能得到,意思是,我在下面做错了什么?抱歉,我现在没有 VS ide 来验证它,所以在这里发布。
另外,一些使用密封类,包括私有构造函数。为什么要用私信封印?
public class Singleton
{
private static readonly Singleton instance;
private Singleton() {}
public static Singleton Instance
{
set
{
if(instance == null){
instance = new Singleton();
}
}
get
{
return instance;
}
}
}
【问题讨论】:
-
拥有这样的
set会误导 IMO。这显然不是要使用value并忽略它。您在 setter 中所做的一切都可以在 getter(或实例声明)中完成。不过,您可以在多个“级别”中创建单例。在此处查看 Skeet 的答案:stackoverflow.com/a/2667058/2957232。我特别建议您也访问那里的链接网站;它有一些极好的深入信息。 -
@BrootsWaymb:谢谢。面试官说少了点东西哈哈。好吧,我不知道它是对还是错,至少考虑一下。但是如果你说这段代码是错误的(在语法上或概念上),那么我想我会在这个问题上失去可信度。无论如何我都会阅读上面的链接
-
哦,忘了说代码最大的直接问题是
instance被标记为readonly,所以它不能存在于setter中。至于sealed的事情,请阅读他回答中的链接。它解决了这个问题。 -
Why sealed with private cons?阻止任何其他类新建第二个实例。 -
是的。您可以继承该类,因此拥有“两个”类。
标签: c# .net c#-4.0 singleton private-constructor