2011-03-31 74 views
3

我喜欢将C#代码的注释和Xml文档保留得非常少。倾向于在可能的情况下使代码自行记录。为什么C#析构函数需要具有XML文档?

但是,如果我不在公共类的析构函数上放置Xml注释,C#编译器会发出警告。为什么是这样?

是否有一些有用的信息,我应该将这些信息放到Xml注释中,我从来没有这样做过。我从来没有发现自己需要阅读析构函数的注释。编译器是否过于热心?

+4

@Reed:顺便说一句,这是C#中的“析构函数”,而不是终结器。请参阅规范的第10.13节,该部分开始于“*析构函数是实现破坏类实例所需的操作的成员。*”许多人认为这是一个不好的名称选择,我同意。 “终结者”本来会更好。但他们被称为析构函数,在C#中,而不是终结器。 – 2011-03-31 16:03:18

+1

@Reed微软不同意我认为:http://msdn.microsoft.com/en-us/library/66x5fx1b.aspx – 2011-03-31 16:03:40

+4

@Reed:它取决于你阅读的规范的版本。 ECMA规范涉及终结器,但MS规范仍然指向析构函数。 – 2011-03-31 16:04:27

回答

2

如果您打开XML Doc注释,编译器会要求您记录API中的所有内容。析构函数是API的一部分,真的应该包括在内。

一个析构函数通常应该只存在于IDisposable类中,并且记录下来有助于发信号/提醒人们在对象上调用Dispose(),因为这样做(如果正确实施)将显着降低GC压力。

0

对于任何使用您的代码的人来说,确切知道终结器的功能可能会有所帮助。换句话说,如果你正在处理大量的非托管资源,那么当文档清楚地说明你的类在释放这些资源时如何处理这些资源会很有帮助。

0

它坚持认为,因为您的课程是公开的,并且C#析构函数最终会覆盖从程序集外部可见的protected method

+0

不,在C#中,Finalize()的可见性甚至比私有的更小。对于析构函数也是如此,即使在课堂内部也无法调用/查看它。 – 2011-03-31 16:13:43

+1

您的程序集可能会被C#以外的其他语言重复使用。 – 2011-03-31 16:15:55

1

我怀疑,尽管我没有证据,但警告只是因为它在所有未标记为私有的方法上查找doc注释而引发。我怀疑有一个特定的规则,即析构函数特别需要评论。

相关问题