如何在C#中评论/记录覆盖?

有时我会覆盖基类中的方法。 有时我甚至用空方法覆盖它们,因为我想要的是防止这种行为。

在过去,我会写这样的东西来表明绕过基本方法意图

protected override void OnMouseUp(MouseEventArgs e) { // base.OnMouseUp(e); } 

(我知道注释的代码行是一件坏事。我曾经这么做过)

但我想做得更好:

  • 如何记录覆盖的意图? 特别:
  • 我在override的XML
    ?) 文档中写了什么?

评论如

 // This method is intentionally blank because // we do not want the base class functionality 

好多了

 // base.SomeMethod(); 

第一条评论清楚地说明了你为什么做了你所做的事情,而下一位开发人员也不必怀疑对基本方法的调用是否被意外注释掉了。

如果您可以控制基类,那么删除该方法并使该类更抽象可能更好。 然后,您可以选择仅在需要它的子类中实现该function。

对于文档,我只使用内置文档标记 :

 /// Exiting drag mode on mouse up protected override void OnMouseUp(MouseEventArgs e) { ... 

为澄清意图,我只想发表评论

 protected override void OnMouseUp(MouseEventArgs e) { // not calling the base implementation ... } 

这条线

 // base.OnMouseUp(e); 

让人觉得这个电话暂时被注释掉了(可能有人忘记恢复它)

在我看来,评论基类调用与确保意图明确相反。 人们会想知道为什么评论行仍然存在,以及它是否仍然有用,因为你没有删除它。 所以我会删除注释掉的行。

您可以像任何其他方法一样记录覆盖,并在文档中指定为什么将方法保留为空。 您可以将原因写入方法体中作为注释,我想这是一个偏好问题。

我认为这取决于此信息是否仅对维护代码的开发人员或代码用户(例如库的用户)很重要。 对于通常仅由操作系统调用的事件(如在您的示例中),将其放在摘要标记中并不是必需的。

但是,如果您需要覆盖禁用基类行为的方法,也许您应该重新考虑设计的那一部分。 这种行为对我来说似乎有点不直观。