70

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

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

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

4

12 回答 12

107

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

于 2011-05-04T13:13:29.297 回答
37

(根据评论编辑...)

如果您安装了 ReSharper:

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

如果您没有 ReSharper:

  • 您可以使用Reflector,它能够非常轻松地向您显示所有类型层次结构 - 在类型名称下方是基本类型和派生类型的可扩展项。类似的工具可用,例如ILSpydotPeek
  • 购买 ReSharper - 这是一个很棒的工具 :)
于 2009-03-06T20:57:58.200 回答
29

将光标放在类或接口类型上,然后

CTRL + F12

于 2016-05-26T10:59:46.187 回答
15

使用 Visual Studio 2010+

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

在此处输入图像描述

使用 Resharper 7

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

在此处输入图像描述

于 2014-04-24T19:36:40.270 回答
10

对于使用 Visual Studio 2015 的用户,有一个名为Go To Implementation的很棒的扩展。试试看。

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

于 2015-08-30T15:12:53.590 回答
9

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

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

  • 转到实施。许多人一直在等待的功能:只需右键单击接口或抽象方法并选择此命令即可导航到实现。
于 2016-02-24T00:24:59.060 回答
2

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

于 2009-03-06T20:57:17.360 回答
2

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

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

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

Visual Studio 屏幕截图

于 2014-10-20T11:18:13.310 回答
2

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

快捷键:

  1. Ctrl+, (Ctrl+逗号)

菜单:

  1. 编辑菜单
  2. 单击“导航至...”

好处:

  • 不显示所有参考,如“查找所有参考”
  • 显示实现的“类型”,以便它会注意哪个是您的接口
于 2015-04-17T16:25:46.930 回答
1

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

于 2014-10-17T19:47:29.633 回答
0

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

于 2009-03-06T20:57:55.173 回答
0

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

于 2009-03-06T21:00:52.763 回答