在C#中从接口继承XML注释

83
我想知道是否有人知道如何将接口的XML注释与实现链接起来。问题在于我希望基本注释首先来自我的接口。例如:
interface myinterface {

       /// <summary>
       /// Does something.
       /// </summary>
       void method1(string foo);

}

然后实现的方法是:

public class myclass : myinterface {


       public void method1(string foo) {
             //do something...
       }
}

现在,如果我在实例化对象后将鼠标悬停在该方法上:

myclass foo = new myclass();
foo.method1("do something");

如何让注释出现在悬停弹出窗中?我能否将接口注释与实现链接起来?我知道Java有一种方法,但找不到C#的解决方案。

谢谢


15
+1 是对那个问题非常好的回答。 - jcolebrand
3
我很久以前就对这个产生了疑问。应该有一种属性可以添加到一个类中,以继承文档说明。 - BentOnCoding
Visual Studio 竟然有这么奇怪的遗漏 :/ - nawfal
VS的开发者们,当实际方法中没有可用的接口时,能否请您显示摘要! - Arjun_TECH
6个回答

21

更新的回答:

使用 <inheritdoc />-标签

旧的回答:
在我看来,连接XML注释是不可能的,但您可以使用类似GhostDoc这样的工具,将接口/基类的XML注释复制到其实现/派生类中。


1
使用GhostDoc吧;它会首先查看父类或方法是否被覆盖,如果是,则复制注释。ReSharper也可以在提取新的超类/接口或将成员上移/下移层次结构的更有限范围内复制xml-doc注释。 - KeithS
这需要专业版吗?我只能使用非专业版逐个成员地进行操作,而且无法在类级别上工作。 - Keith
1
ReSharper也可以做到这一点,因此如果您已经拥有它,请将光标放在继承的方法/属性上,按下“ALT+RETURN”,然后您可以“从基础复制注释”。 ReSharper每天都让我惊叹! :-) - itmuckel
///<inheritdoc/>。在实现方法中使用它。现在您可以在"foo.method1("do something");"上悬停并阅读接口注释。 - Glauco Cucchiar

9

XMLDoc定义了一个标签<include />,用于从另一个文件中包含注释,该标签已经存在于Visual Studio 2003之前。最大的限制是被引用的文件应该只包含XMLDoc的文档,而不是其他源文件。

更多详细信息请参见MSDN页面


1
虽然不完全是答案,但仍然是非常有用的信息,所以谢谢。 - Basic

7
如果您使用GhostDoc,它会在接口和实现代码之间的“传输”文档方面提供很大帮助。

1
有没有关于如何完成这个任务的提示(我刚刚安装了Ghost Doc v4)?或者这是专业版/免费版的区别吗? - Konstantin
1
@Konstantin 我一直使用免费版本,并没有做任何特定的事情来导致这种情况发生。我只是在接口中编写文档,然后当我在实现类中按下CTRL+D来获取一个方法(该方法尚无文档)时,它将从接口中相应的方法中复制。至少以前是这样的(在我的当前项目中不使用GhostDoc)。 - Fredrik Mörk
2
感谢功能似乎是当前专业版的一个特色。 - Konstantin
六年后,我刚尝试了 Ghostdoc Community(免费版本),它很好用。只需在界面中编写文档并在实现类中的方法上方键入 /// 即可。 - Michaël Polla

2

0

http://blog.x-tensive.com/2008/02/fixml.html

这是一个后处理器,具有某些原始文档系统缺乏的附加选项。

来自网站:

简要概述:

FiXml是由C# \ Visual Basic.Net生成的XML文档的后处理器。它解决了这些语言中编写XML文档时最令人讨厌的一些情况: - 不支持从基类或接口继承文档。即任何重写成员的文档都应该从头开始编写,尽管通常至少继承其中的一部分是非常可取的。 - 不支持插入常用文档模板,例如“此类型是单例 - 使用其属性获取唯一实例。”,甚至“初始化类的新实例。”


有人知道X-Tensive FiXml是用来修改源文件还是只修改输出的XML文档吗?哦,它现在作为Xtensive.MSBuildTasks的一部分位于稍微不同的位置。 (http://x-tensive.com/Downloads/?Path=Freeware\Xtensive.MSBuildTasks) - kpollock

0

我建立了一个命令行工具,用于后处理XML文档文件并添加对<inheritdoc/>标签的支持。

虽然它不能帮助源代码中的Intellisense,但它允许修改后的XML文档文件包含在NuGet包中,并因此与引用的NuGet包中的Intellisense一起使用。

请参见www.inheritdoc.io获取更多信息(提供免费版本)。


1
我经常使用这个标签,但我不记得安装任何第三方系统来实现它。奇怪的是没有人提到过它。 - Ross Brasseaux

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