我应该在XML文档注释中包括什么?


13

我试图提出一个更好地记录我的代码的观点,尤其是在涉及类成员的XML注释时,但通常感觉很傻。

对于事件处理程序,命名约定和参数是标准且清晰的:

/// <summary>
/// Handler for myCollection's CollectionChanged Event.
/// </summary>
/// <param name="sender">Event Sender</param>
/// <param name="e">Event Arguments</param>
private void myCollection_CollectionChanged(object sender, NotifyCollectionChangedEventArgs e)
{
    // actual code here...
}

我还经常使用简单的属性(IMO)来明确命名,因此摘要是多余的:

/// <summary>
/// Indicates if an item is selected.
/// </summary>
public bool ItemIsSelected
{ get { return (SelectedItem != null); } }

我觉得这样的注释不会添加声明本身尚未传达的任何信息。一般的智慧似乎是,最好保留不重复代码的注释。

显然,XML文档不仅仅是常规的内联代码注释,理想情况下将具有100%的覆盖率。什么应该我是在这种情况下,写什么呢?如果这些示例都可以,那么它们可以为我带来什么价值呢?


6
“理想情况下将具有100%的覆盖率” -这值得商de。我喜欢它们仅用于智能感知弹出窗口,而对于类型的公共接口,但是对于私有方法,它们太过于冗长了。IMO
Ed S.

3
100%的覆盖率不适用于私有方法,尤其是事件处理程序。
SLaks 2011年

1
GhostDoc为我编写了我的文档。GetData()您问“做什么”?为什么,Gets the data当然!
Devin Burke

2
@Justin:GhostDoc看起来很酷。我可能会捡起来。

1
@Justin:arg,我讨厌GhostDoc-乍一看似乎很棒,但是过了一会儿,您意识到可以发现自动生成的注释一英里,通常是当您返回旧代码并必须弄清楚它的作用时。尽管这样做确实很容易对所有内容进行XML注释,但是并不能确保这些注释中包含任何实际信息。GhostDoc为您提供了一个很好的起点,但是让您很容易变得懒惰,并且只需浏览一下名称和签名就可以省掉所有您想不到的东西。
基思(Keith)

Answers:


10

XML文档注释供公共成员使用。

编译器警告明确指出这一点:

公开类型或成员'Type_or_Member'的XML注释丢失

仅当私有成员的名称不明显时,才应将它们添加到私有成员中。


6

在这里纯粹是意见,因此请考虑它的价值。

讨厌多余的xml注释。对于只在方法/属性名称中添加空格的“幽灵”文档样式而言,这是令人怀疑的。它没有任何价值,只会使我对实际代码的看法变得混乱。

如果确实需要澄清,请对其进行评论。但是,可以通过一些名称有意义的小型聚焦方法来传达许多清晰度。如果可以改进代码,并且不必添加注释,请不要注释代码。

甚至不要让我开始不必要地使用this.Me.

附带说明一下,我很想拥有一个Visual Studio插件,让我可以切换xml注释的可见性。(提示提示)


我想这this.可能已经开始了,因为出于某种原因,Microsoft的官方指南建议对本地变量和实例private变量使用完全相同的命名约定。IMO,这是一个非常有缺陷的样式,在某些情况下,您可能离StackOverflowExceptionin属性sets 仅有一根粗手指,或者MyProperty = MyProperty;导致字段初始化为零而不是构造函数参数,甚至Microsoft m_大部分时间仍在内部使用。
jrh

2

正如@SLaks所提到的,在公开成员上,XML文档应该相当详细和完整。

但是,它们对于私有成员,受保护成员或内部成员也非常有用,因为Visual Studio会使用XML doc注释填充智能感知和帮助工具提示。

这意味着:

// describe what this does
private void DoSomething() 
{
    // or describe it here...

可能是完全足够的文档,但是:

/// <summary>describe what this does</summary>
private void DoSomething() 
{

从代码的其他地方快速查看将更加容易。

通常在公共XML注释中,我是为API的某些外部用户编写的,在内部XML注释中,我是为我或团队中的其他人编写的。

跳过参数描述对于前者可能不是一个好主意,而对于后者则很好。

我想补充(在公共API文档尤其是)总是包括是否getset在属性:

/// <summary>Gets a value indicating whether an item is selected.</summary>
public bool ItemIsSelected
{ 
    get { return SelectedItem != null; } 
}

这不是从C#的智能感知明显的是否get还是set可用的,但把它的XML注释将意味着你可以从提示一眼就能看出。


要看。如果您有什么public get而是internal set作为一个属性?您如何评价?:-)
Guillaume

1
@Guillaume因为XML注释是公开的,所以我只get用XML记录文档并set用常规//注释记录文档。
基思
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.