【发布时间】:2012-04-12 12:17:25
【问题描述】:
有时我会覆盖基类中的方法。有时我什至用一个空方法覆盖它们,因为我想要的是防止这种行为。
过去我会写这样的东西来显示绕过基本方法的意图:
protected override void OnMouseUp(MouseEventArgs e)
{
// base.OnMouseUp(e);
}
(我知道注释的代码行是一件坏事。我使用来做)
但我想做得更好:
- 我如何记录覆盖的意图?具体来说:
-
我在覆盖的 XML 中写什么 (
<summary>?) 文档?
【问题讨论】:
-
@Eva 我不确定你的意思。通过快速阅读这篇文章,我认为您是在说我不应该阻止基类行为?
-
Here's 一个更好地解释它的 SO 问题。基本上你的子类不应该违反你的超类的不变量。您的子类应该添加功能,而不是更改或删除功能。通常,如果您的子类违反了 LSP,您可能正在查看组合情况。
-
@Eva 我明白了。如果我没记错的话,我使用它的时间是修改绘图行为和类似的东西;没有“副作用”。如果一个方法“没有副作用”,从某种意义上说,这些对代码来说是无形的,那么修改基类的行为是可以的,对吧?
-
不是修改状态。它是关于能够在所有实例中使用子类作为超类的替代品(或替代品)。在我发布的链接中,有方形和矩形的示例。您可以在没有副作用的情况下实现 Rectangle 的 Square 子类(在第二个链接的答案之一中有一个示例),但它仍然违反 LSP,因为 Rectangle 的不变量之一是当您更改宽度时,高度应该即使宽度和高度不同也不会改变。在第二个链接中有更好的解释。
标签: c# inheritance comments overriding xml-documentation