为什么单身人士班应该被封闭?

我想知道为什么单身人士课程应该被封闭。 如果我们将构造函数设置为私有的,那么我们可以防止这个类被派生出来吗?..下面我正在从MSDN上粘贴几行代码。 请给我一些颜色..

在这种策略中,实例是在类的第一次引用时创建的。 公共语言运行库负责变量初始化。 该类被标记为密封以防止派生,这可能会增加实例 。 关于标记密封类的优缺点的讨论,请参阅[Sells03]。 另外,该变量被标记为只读,这意味着它只能在静态初始化(这里显示)或类构造函数中分配。

http://msdn.microsoft.com/en-us/library/ff650316.aspx


如果我们将构造函数设置为私有的,那么我们可以阻止该类被派生出来吗?

不完全的:

public class NotReallySingleton
{
    private NotReallySingleton() {}

    public class CursesFoiledAgain : NotReallySingleton
    {
    }
}

...

NotReallySingleton x = new CursesFoiledAgain();
NotReallySingleton y = new CursesFoiledAgain();

这是有效的,因为private仅限于该类型的程序文本,包括嵌套类型。 因此CursesFoiledAgain可以访问CursesFoiledAgain的私有构造NotReallySingleton

但是,即使将此放在一边,如果你的意图是没有人可以从课堂中派生出来,为什么你不想通过sealed来尽可能清楚地表明该意图?


sealed关键字意味着该类不能被继承。 将构造函数声明为私有意味着无法创建该类的实例。

这些不是一回事。 您可以拥有一个带有私有构造函数的基类,但仍然继承该基类,定义一些公共构造函数,并有效地实例化该基类。

请记住,构造函数不是继承的(所以派生类不会仅仅因为基类而具有所有私有构造函数),并且派生类总是首先调用基类构造函数。 标记sealed的类可以防止有人在仔细构建的单身人员课程中轻松工作,因为它会阻止某人继续从课程中继承。


这是一种设计准则,显然你可以遵循或不遵循。 这只是标志着你的设计意图,比如在基类中将其标记为abstract以避免将来可能发生混乱。

链接地址: http://www.djcxy.com/p/51101.html

上一篇: Why singleton class should be sealed?

下一篇: An alternative to the Singleton pattern?