我昨天在接受采访,其中一个问题是什么是单例以及如何实现它。
来自 MSDN 的解决方案 #1:
using System;
public class Singleton
{
private static Singleton instance;
private Singleton() {}
public static Singleton Instance
{
get
{
if (instance == null)
{
instance = new Singleton();
}
return instance;
}
}
}
我给出了最简单的解决方案(来自 msdn 实现的解决方案编号 1),而他想要线程安全的解决方案(解决方案编号 3)。
来自 MSDN 的解决方案#3:
using System;
public sealed class Singleton
{
private static volatile Singleton instance;
private static object syncRoot = new Object();
private Singleton() {}
public static Singleton Instance
{
get
{
if (instance == null)
{
lock (syncRoot)
{
if (instance == null)
instance = new Singleton();
}
}
return instance;
}
}
}
让我感兴趣的是 msdn 示例中的私有构造函数。我不知道这样的事情存在。
看看msdn就可以了
public class Counter
{
private Counter() { }
public static int currentCount;
public static int IncrementCount()
{
return ++currentCount;
}
}
然后我问:
为什么你会有一个只有静态成员的类,因此想阻止它的实例被创建,因此使用私有构造函数 - 而不是使类成为静态的?!
PS .:问题不在于单例- 是关于描述一个场景,我会选择创建一个仅具有静态成员的可实例化类(并因此最终创建对私有构造函数的需求)而不是使用静态类。