你如何找到界面的所有实现?

时间:2009-03-06 20:53:01

标签: c# visual-studio resharper reflector

假设您有一个在C#中定义的接口。查找提供接口实现的所有类的最简单方法是什么?

强力方法是在Visual Studio中使用“查找引用”并手动查看结果以将用法与实现分开,但是对于大量引用的大型代码库中的接口实现相对较少,这可能非常耗时且容易出错。

在Java中,在代码库上运行javadoc(使用-private选项包含私有类)将生成接口的文档页面(例如Comparable),其中包括接口的所有实现类以及任何实现类子接口(虽然它不包括子接口的实现类,但通过深入查看列出的子接口可以相对容易地确定这些子接口)。这是我正在寻找的功能,但使用C#和Visual Studio。

12 个答案:

答案 0 :(得分:97)

您可以右键单击方法名称(界面中的定义或其他类中的实现),然后选择“查看调用层次结构”。在“调用层次结构”窗口中,有“Implements”文件夹,您可以在其中找到接口方法实现的所有位置。

答案 1 :(得分:33)

(根据评论编辑......)

如果您安装了ReSharper:

在Visual Studio中,右键单击类型名称,然后选择“转到继承者”。或者,选择类型名称,然后转到ReSharper / View / Type Hierarchy以打开新选项卡。 (菜单会显示键盘快捷键 - 这可能会有所不同,这就是我解释如何找到它的原因:)。

如果您没有ReSharper:

  • 您可以使用Reflector,它能够非常轻松地向您显示所有类型层次结构 - 在类型名称下面是基本类型和派生类型的可扩展项目。我们提供了类似的工具,例如ILSpydotPeek
  • 购买ReSharper - 这是一个很棒的工具:)

答案 2 :(得分:15)

将光标置于类或接口类型和

CTRL + F12

答案 3 :(得分:13)

使用Visual Studio 2010 +

右键单击成员方法,然后选择查看调用层次结构。展开Implements文件夹。这列出了实现该方法所属接口的所有类型。

enter image description here

使用Resharper 7

右键单击界面>导航至>派生符号。 粗体中列出的符号直接来自界面。非粗体符号来自超类。

enter image description here

答案 4 :(得分:9)

对于使用Visual Studio 2015的用户,有一个名为Go To Implementation的强大扩展程序。试一试。

安装扩展程序后,您只需右键单击界面的任何位置(例如IUrlShortener),然后单击Go To Implementation菜单。如果您只有一个实现该界面的类,单击该菜单将直接带您进入该类。如果您有多个实现该接口的类,它将列出所有类。

答案 5 :(得分:6)

对于使用Visual Studio 2015的用户,请安装Visual Studio 2015 Update 1 RC。来自Visual Studio blog

  

今天我们发布了Visual Studio 2015 Update 1 RC,它基于我们三周前发布的Update 1 CTP。除了此处所述的CTP中引入的功能外,候选发布版还包括以下内容:

     
      
  • 转到实施。许多人一直在等待的功能:只需右键单击接口或抽象方法,然后选择此命令即可导航到实现。
  •   

答案 6 :(得分:2)

我不认为这个功能是内置在VS中的,但是IIRC Resharper有这个功能。

答案 7 :(得分:2)

您可以对界面进行正则表达式搜索。

:(\ *[^},]+,)*\ *IMyInterfaceName

CTRL + SHIFT + F启动以下窗口:

Visual Studio Screenshot

答案 8 :(得分:2)

我更喜欢“导航到...”选项。将光标放在函数调用上,请尝试以下操作:

快捷键:

  1. Ctrl +,(Ctrl +逗号)
  2. 菜单:

    1. 编辑菜单
    2. 点击“导航至...”
    3. 优点:

      • 不会显示所有引用,例如“查找所有引用”
      • 显示 “类型”的实现,所以它会注意哪个是你的界面

答案 9 :(得分:1)

使用Shift + F12显示所有引用,包括定义。

答案 10 :(得分:0)

如果您使用resharper ALT + END 快捷方式可能有助于查找所有继承者。

答案 11 :(得分:0)

我听说过(我自己没有经验)doxygen 对.Net来说就像javadoc对java一样。