评论界面,实现或两者?

ng5*_*000 119 c# java comments interface

我想我们所有人(当我们可以被打扰时!)评论我们的界面.例如

/// <summary>
/// Foo Interface
/// </summary>
public interface Foo
{
    /// <summary>
    /// Will 'bar'
    /// </summary>
    /// <param name="wibble">Wibble factor</param>
    void Bar(string wibble);
}
Run Code Online (Sandbox Code Playgroud)

您是否也评论实施(也可能提供给客户,例如作为图书馆的一部分)?如果是这样,你如何管理保持两者同步?或者您只是添加"查看文档界面"评论?

谢谢

Nee*_*aks 92

作为一般规则,我使用与代码相同的DRY(不要重复自己)原则:

  • 在界面上,记录界面
  • 在实施方面,记录实施细节

特定于Java:在记录实现时,使用{@inheritDoc}标记从接口"包含"javadocs.

欲获得更多信息:

  • 对于C#,您可以使用SandCastle支持的`<inheritdoc />`.([更多信息...](http://www.ewoodruff.us/shfbdocs/html/79897974-ffc9-4b84-91a5-e50c66a0221d.htm)) (31认同)
  • 仅在接口上指定时,继承类中的属性和其他元素不会在工具提示中显示XML文档.对于同一类的外部使用,它是可见的.这可能是Visual Studio 2015的一个错误. (2认同)
  • 这是为Sandcastle/SHFB` inheritdoc`页面提供的@Virtlink链接的更新版本:http://ewsoftware.github.io/XMLCommentsGuide/html/86453FFB-B978-4A2A-9EB5-70E118CA8073.htm (2认同)
  • &lt;inheritdoc /&gt; 似乎适用于 C# 中的 Visual Studio 2019。如果您使用它,智能感知将显示界面中的评论。 (2认同)

Rag*_*hav 9

C#用法:

界面可以是这样的:

    /// <summary>
    /// Helper class to access various properties for the current site.
    /// </summary>
    public interface ISiteHelper
    {
        /// <summary>
        /// Gets the site id of the current site
        /// </summary>
        /// <returns>The site id.</returns>
        int GetSiteID();
    }
}
Run Code Online (Sandbox Code Playgroud)

实现可以是这样的:

/// <inheritdoc />
public class SiteHelper: ISiteHelper
{
    /// <inheritdoc />
    public int GetSiteID()
    {
        return CommonRepository.GetSiteID();
    }
}
Run Code Online (Sandbox Code Playgroud)

  • 这只适用于方法。类上的“InheritDoc”将显示“Object”的文档。 (4认同)

Nik*_*nte 7

如果您使用GhostDoc插件,当您右键单击并在方法上选择"Document This"时,它会使用界面中的注释更新实现.


Len*_*ate 6

界面而已。对两者都进行注释是重复的,如果代码发生变化,这两组注释很可能最终会失去同步。用“implements MyInterface”评论实现......像Doxygen这样的东西会生成文档,这些文档将派生文档包含到实现文档中(如果你正确设置了它们)。


X-I*_*nce 5

注释接口应该有足够的文档来弄清楚如何使用实际的实现。我向实现添加注释的唯一一次是它是否具有插入以满足接口的私有函数,但是它们只是内部注释,不会在在线文档中看到或可供客户使用。

实现就是这样,只要它们符合接口,就不需要单独记录它们。


gro*_*ver 5

对于C#,它取决于IMO:如果您使用显式接口实现,那么我将不记录实现。

但是,如果直接实现接口并用对象公开接口的成员,那么这些方法也必须记录在案。

正如Nath所说,您可以使用GhostDoc将接口的文档自动插入到实现中。我将此文档映射到Ctrl + Shift + D快捷键及其几乎自动按下的击键之一。我相信ReSharper在为您实现方法时也可以选择插入接口的文档。