有没有一种方法来导航到一个接口的方法的真正实现?

在Visual Studio中,右键单击某个方法调用时,除非通过接口访问此方法,否则您将转到该方法的实现中:在这种情况下,您将转到接口方法而不是实际实现。

有没有一种方法/提示(键快捷键或任何东西)来访问这个实际的实现? 否则,你只是添加一些评论,只是为了记住你在哪里实现它,这是真的不生产和容易出错!

更新:有趣的答案,但我不是很满意,因为所有的都很麻烦。 我会举一个确切的例子:

IInterface iInterface = someObject; iInterface.someMethod(); 

实际上,如果Visual Studio只是稍微聪明一些,只需要在方法调用上方查看一行,就可以看到真实对象在哪里。 这将为我节省很多击键,并避免使用“查找所有引用”,然后用疲惫的眼睛扫描行,看看哪一行包含正确的:)

我做了以下几点:

1)右键单击方法,然后单击“查看调用层次结构”(或快捷键Ctrl + K,Ctrl + T)

2)展开“实现x”文件夹,然后将显示该方法的所有实现。 点击一个去那里。

相对快捷简单。 令人讨厌的是,虽然似乎没有接口本身的等价物。


更新 :从Visual Studio 2015更新1开始,右键单击某个方法并select执行。 您也可以通过工具>选项>环境>键盘将其映射到键盘快捷键,然后searchEdit.GoToImplementation命令。 默认快捷键是Ctrl+F12 。 ( F12将导航到界面)。


使用VS2013,可以将光标放在方法上,然后使用导航至…(CTRL +,),它将显示声明名称的所有位置。 如果不同的接口使用相同的方法名称,则效果不佳。

VS2015更新1现在有一个新的快捷方式称为“去执行”。

我为Visual Studio 2010和Visual Studio 2012创build了一个名为“inheritance边距”的免费扩展,以提供此特定function,并在方法由于签名匹配而实现接口方法时给出明确指示。 在当前版本中,您可以右键单击任何字形以获取要导航到的项目菜单。

inheritance边界 – Visual Studio库

截图

右键单击然后“查找所有引用”。

这将显示所有使用该方法的地方的代码行,包括接口声明和接口方法的实现。 然后,您可以点击该行跳转到代码位置。

根据您拥有的Visual Studio版本,我会有条件地说“是”。

我目前正在使用Ultimate,并没有其他版本来validation这一点。 也就是说,在Ultimate中,您可以使用Architecture Explorer来查找实现。 这比右键点击方法更有意义,但是这里是如何工作的。

  • 转到View->Architecture Explorer (或CTRL-W,N)
  • 点击Class View并在打开的列表中find包含界面的命名空间。
  • 在名称空间列表的右边是一个垂直button,表示Types 。 点击这个
  • selectInterfaces
  • 从列表中select你的界面
  • 一个垂直的button表示Members将出现在右边。 点击那个button
  • selectImplemented by (在Inbound NavigationImplemented by ,并将提供您的界面的实现列表。
  • 双击实施将带你到课堂。

在2012旗舰版中,您可以在解决scheme资源pipe理器中search界面。 右键单击界面并select“派生types”,实现的类将显示在解决scheme资源pipe理器中。 不知道它是否快递。

Visual Studio 2015 Update 1(2015年12月发布)现在添加了一个标准的右键单击“执行”function。

这不可能。 你所描述的只有在接口被限制在1个实现的情况下才有意义。

考虑这个例子:

 interface IWrite { void Write(); } class A : IWrite { public void Write() { Console.WriteLine("A"); } } class B : IWrite { public void Write() { Console.WriteLine("B"); } } class X : IWrite { private readonly string _x; public X(string x) { _x = x; } public void Write() { Console.WriteLine(_x); } } class UseIWrite() { public void Use(IWrite iwrite) { iwrite.Write(); } } 

如果您使用执行 Write in UseIWrite,它将带您到接口的声明,因为在那一点上任何的IWrite实现可以传递到该方法。

幸运的是,像ReSharper这样的工具可以让你find该方法的所有用法 ,所以你可以轻松地导航到所需的实现。

对于使用Resharper的人,按下CTRL + F12将使您直接进入类方法!

看看这个新的免费的Visual Studio 2013扩展 – 实现器 。 它添加选项“转到实施”到Visual Studio编辑器上下文菜单。

它不像Resharper那么可靠和快速,但它的工作很好。

Visual Studio与更新1现在实现此function! 只需右键单击该成员,您应该看到“转到定义”下的“转到实施”。

Visual Studio只能告诉你它在哪里被引用,但这可能太粗糙了。

还有其他的工具可以告诉你更多关于你的应用程序的结构,包括哪个类实现哪个接口,哪个方法否决哪个方法,等等。 我个人更喜欢使用Understanding / For C / C ++。

去声明将打开接口方法。 去实现,会带你或列出实现该接口方法的代码的类(而不是接口方法本身)。

更新

正如Jon Skeet在评论中指出的(我在回答之前错过了),我所描述的function可能是一个ReSharperfunction…不是Visual Studio的一个function。

不,这是不可能的,尽pipe由VS维护的内存代码结构复杂,代码导航是相当吝啬的。

似乎唯一的select是使用“查找所有引用”进行全局search,然后手动search结果列表以排除types化的值声明,转换等,或者在代码编辑器中使用VS内的其他工具。 一切都相当复杂和令人失望。