为什么单身人士班应该被封闭?
我想知道为什么单身人士课程应该被封闭。 如果我们将构造函数设置为私有的,那么我们可以防止这个类被派生出来吗?..下面我正在从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
以避免将来可能发生混乱。