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


78

我想知道是否有人知道如何将接口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#的解决方案。

谢谢


14
+1是个该死的好问题……
jcolebrand 2010年

3
我一直想知道这一点。应该有一个可以添加到类中以继承文档的属性。
BentOnCoding 2011年


VS奇怪的遗漏:/
nawfal

VS伙计们,当它在实际方法上不可用时,请您能显示来自接口的摘要!
Arjun_TECH

Answers:


18

链接XML注释是不可能的,但可以使用GhostDoc之类的工具将XML注释从Interface / Baseclass复制到实现/派生类。


1
是的,请使用GhostDoc;它会首先查看父类或方法是否被覆盖,如果是,则复制注释。ReSharper还将在更有限的范围内复制xml-doc注释,以提取新的超类/接口或在层次结构中上/下推成员。
KeithS

这不是需要Pro版本吗?我只能通过一次由一名成员使用非Pro版本来做到这一点,并且它在类级别上不起作用。
基思

1
ReSharper也可以做到这一点,因此,如果您已经拥有它,请将光标放在继承的方法/属性上,按,然后ALT+RETURN可以“从基础复制注释”。ReSharper每天都令我惊讶!:-)
itmuckel

9

XMLDoc定义了一个标记,<include />用于包含来自Visual Studio 2003以来的另一个文件的注释。最大的警告是,引用文件应该是仅包含XMLDoc文档的文件,而不是另一个源文件。

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


1
仍然不是一个很好的答案,而是非常有用的信息,所以谢谢
基本的

7

如果您使用GhostDoc,它将文档从接口“传输”到实现代码有很大帮助。


1
有关如何完成此操作的任何提示(我刚刚安装了ghost doc v4)。还是这是专业版/免费版?
康斯坦丁

1
@Konstantin我一直使用免费版本,但从未做过任何专门的事情来发生这种情况。我只是在接口中编写文档,然后在实现类中为某个方法按CTRL + D时(该方法尚无文档),它将从接口中的相应方法复制过来。至少它曾经那样工作(在我当前的项目中不使用GhostDoc)。
弗雷德里克·莫尔克(FredrikMörk)2012年

2
如今,感谢似乎已成为专业版的功能。
康斯坦丁

6年后,我刚刚尝试了Ghostdoc社区(免费),它可以工作。在接口中编写文档,然后///在实现类中的方法上方简单键入。
迈克尔Polla


0

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

它是后处理程序,具有某些缺少原始文档系统的附加选项。

从网站:

简要摘要:

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


有谁知道X-Tensive FiXml是要更改源文件还是仅更改输出XML文档?哦-现在,它作为Xtensive.MSBuildTasks的一部分位于稍微不同的位置 x-tensive.com/Downloads/?Path=Freeware \ Xtensive.MSBuildTasks)
kpollock

0

我构建了一个命令行工具来对XML文档文件进行后处理,从而增加了对<inheritdoc />标记的支持。

虽然它对源代码中的Intellisense没有帮助,但它确实允许将修改后的XML文档文件包含在NuGet包中,因此可以在引用的NuGet包中与Intellisense一起使用。

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


1
我经常使用此标签,但我不记得要安装任何第三方系统。奇怪的是没有人提到它。
停泊
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.