Ani*_*ish 7 .net singleton design-patterns class-design sealed
我想知道为什么要密封单例类.如果我们将构造函数设置为私有,我们可以阻止类派生吗?..下面我从MSDN粘贴几行.请给我一些颜色..
在此策略中,实例是在第一次引用类的任何成员时创建的.公共语言运行库负责变量初始化.该类被标记为密封以防止派生,这可能会添加实例.有关标记类密封的优缺点的讨论,请参阅[Sells03].此外,变量标记为只读,这意味着它只能在静态初始化(此处显示)或类构造函数中分配.
Jon*_*eet 11
如果我们将构造函数设置为私有,我们可以阻止类派生吗?
不完全:
public class NotReallySingleton
{
private NotReallySingleton() {}
public class CursesFoiledAgain : NotReallySingleton
{
}
}
...
NotReallySingleton x = new CursesFoiledAgain();
NotReallySingleton y = new CursesFoiledAgain();
Run Code Online (Sandbox Code Playgroud)
这是有效的,因为private访问仅限于该类型的程序文本,包括嵌套类型.所以CursesFoiledAgain可以访问私有构造函数NotReallySingleton.
但即使把这个放在一边,如果你的意图是没有人可以从课堂上得到,为什么你不想通过这种方式尽可能清楚地表明这种意图sealed呢?