代码注释:你把代码注释放在接口上还是具体类上,或者两者都有?

9

如何最好地记录类和接口。假设您有一个名为Foo的具体类,它派生自名为IFoo的接口。您在哪里放置方法的注释?您是否需要在接口和具体类上重复注释?

以下是注释被复制的示例:

public class Foo : IFoo
{
    /// <summary>
    /// This function does something
    /// </summary>        
    public void DoSomething()
    {
    }
}

public interface IFoo
{
    /// <summary>
    /// This function does something
    /// </summary>        
    void DoSomething();
}
9个回答

22

我会在两者上都加注释。

在接口上,我会注释接口成员和使用背后的意图。

在实现上,我会注释特定实现的原因。


3
如果你使用GhostDoc,就可以轻松地将接口成员的注释从接口复制到它们具体的实现中。 - vgru

5

我将它们都放在了代码和界面中,但是让它们保持同步很麻烦,当我不确定的时候,我只把它们放在界面上。

我这样做是因为我喜欢在使用代码时看到工具提示,而几乎总是应该使用界面...


4

我通常会在两个地方都写注释,但是它们的内容并不相同。接口的注释应该描述这个方法/接口的抽象目的,而具体的注释则会在接口目的的上下文中讨论方法/类的实现细节。


3

您的示例代码没有使用显式接口实现。您的代码的客户端将需要两者,因为他/她可以通过类对象或接口引用调用方法。使用显式接口实现,您可以省略类方法注释,因为客户端永远看不到它。这是假设您正在使用XML文档生成IntelliSense信息。


2

仅适用于接口。因为在这种情况下,我不需要同步它们。我的IDE帮助我查看具体类中的接口注释。而API文档生成器也是如此。


2

两者都可以,但我希望有内置功能来保持它们同步。


2

最好使用标签<referTo>System. .... </referTo>来链接注释


2
理想情况下,只需要记录接口文档,因为它定义了每个具体实现都需要遵循的契约。

1

我并不真正使用它们。相反,我确保以一种结构化的方式编写代码,并以一种明显的方式命名所有方法和变量,使得它们在没有注释的情况下也能清楚地表达其功能。注释的问题在于它们不会被编译、执行,也不会被单元测试检验,因此很难与代码保持同步。


1
这些注释更多是为了与Intellisence一起使用,而不是为了理解代码。我确实同意它们更难维护,但它们对于探索API非常有帮助。 - Matthew Whited
嗯,我想当你为来自不同团队的某人开发API时,它们可能会很有用。 - Grzenio

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接