C# 在C语言中使用文档属性#
在中,他们使用C# 在C语言中使用文档属性#,c#,.net,attributes,documentation,C#,.net,Attributes,Documentation,在中,他们使用Author作为属性的示例: [Author("Jane Programmer", Version = 2), IsTested()] class Order { // add stuff here ... } 在我看来,这是一个好主意,因为它允许您使用反射按作者对类进行分组(例如)——有效地将文档中通常包含的元数据公开给编译器,这可能很有用。我立即想到“啊哈!我应该为我的所有内联块文档使用属性”-例如: 然而,我所能找到的关于文档和属性的信息似乎都不支持这种方法。它们都
Author
作为属性的示例:
[Author("Jane Programmer", Version = 2), IsTested()]
class Order
{
// add stuff here ...
}
在我看来,这是一个好主意,因为它允许您使用反射按作者对类进行分组(例如)——有效地将文档中通常包含的元数据公开给编译器,这可能很有用。我立即想到“啊哈!我应该为我的所有内联块文档使用属性”-例如:
然而,我所能找到的关于文档和属性的信息似乎都不支持这种方法。它们都使用XML进行内联文档
是否有任何内置属性来帮助内联文档?如果没有,是否有任何库/包包含内联文档的预定义属性集?将文档保留在属性中的一些缺点:
- 长文本格式不佳李>
- Visual Studio附加组件不支持(例如,使用ReSharper的文档预览功能)李>
- 没有第三方文档生成工具的支持李>
- 在组件中包含文件,大大简化了逆向工程李>
- 使用版本控制系统中存储的元数据复制源代码中的元数据(当VCS向您提供更精确的信息时,在源代码中跟踪任何声明的作者和版本是没有意义的——VCS不会撒谎)
我现在想不出有什么好处。如果我真的需要它,总是可以解析XML文档注释并将整个代码库转换为任何属性形式。这里的问题似乎是“什么是文档?”。如果您感兴趣的“东西”需要通过反射来访问,那么您的隐含属性解决方案就是一个解决方案。但是,如果目的是使用标准文档工具来构建文档,那么就不是这样了
这方面的需要需要需要解决办法。“文件”的需求是什么。也许问题不对?为了完整起见,在测试项目中,您可以:
[TestProperty(“Author”, “Ducky”)]
public void SomeTest()
{
...
}
您可以为常规代码扩展这种方法。
我宁愿不评论理论问题。
也就是说,也许可以创建使用存储库提取特定文件/类/方法的所有“作者”/“编辑器”的脚本。有很多库和包处理XML文档。您真的需要通过反射来查找这些信息吗?为什么不将众所周知的xml文档和一些源代码版本控制结合起来(svn正显示已经完成的工作)?在您的情况下,如果两个开发人员更改了相同的方法/类,会怎么样?IMO,这不是一个好主意,因为您通常不需要运行时的文档。XML文档已经够难看的了,这种方法会更难看。尝试想象一种更复杂的方法,其中描述由几个段落组成。这看起来有什么特点?我不需要,看起来更整洁。更不用说它更漂亮了。C#中注释的XML表示法非常难看。比PHPDoc更糟糕。为什么C不使用
/***/
语法而不是愚蠢的//
?而且,XML已经死了。@ZdeslavVojkovic我同意XML是丑陋的。你觉得这更难看吗?我不太确定。您可以使用@“
多行字符串。C#程序员已经习惯于阅读C#代码(而不是XML)。但也许你可以用这个方法来描述作者和参数,而不是描述?当然,运行时开销不是很大。这将是编译时,如果有什么…我仍然不确定长文本块的格式实际上是任何更糟的。我同意你关于在版本控制中保留作者信息的观点,但这是关于记录什么而不是如何记录的问题——这种方法对于参数仍然有用。其他的论点仅仅是关于当前的支持,这就是承认C#的进化中有一种自上而下的控制结构,但我认为你是对的,这不是一场我可能赢的战争。我永远也不会正确地记录我的课程,因为创造如此丑陋的东西让我心碎。哦,好吧,那么你应该寻求解决你内心的问题;-)正确的文件首先是一个纪律问题。格式是第二位的。然而,摆脱XML注释是一场艰苦的战斗。也许您可以从获取诸如ReSharper之类的帮助程序插件开始,以使键入XML注释更容易。例如,当您有一大组控制台命令时,您可以将命令的描述存储在属性中,并为MyApp--help提取这些描述。@Tomas是的,我也在使用这种技术。但是,在您的情况下,它是应用程序文档,而不是源代码文档。
[TestProperty(“Author”, “Ducky”)]
public void SomeTest()
{
...
}