是否有一种方法导航到接口背后的方法的真正实现?

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

是否有一种方法/提示(快捷键或任何东西)来访问这个实际实现?否则,你只能添加一些注释,只是为了记住你在哪里实现了它,这是非常低效且容易出错的!

更新:有趣的答案,但我不太满意,因为所有都很麻烦。我将给出一个精确的例子:

IInterface iInterface = someObject;
iInterface.someMethod();

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

91886 次浏览

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

更新

正如Jon Skeet在评论中指出的(我在回答之前漏掉了),我所描述的功能可能是ReSharper功能…而不是Visual Studio的。

这是不可能的。只有当接口被限制为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();
}
}

如果你在UseIWrite中使用Write的进入执行阶段,它会带你到接口的声明,因为在那一点上任何IWrite实现都可以传递到方法中。

值得庆幸的是,一些工具,如ReSharper,可以为你提供方法的找到所有用法,所以你可以很容易地导航到所需的实现。

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

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

根据你所拥有的Visual Studio版本,我将有条件地说“是”。

我目前正在操作终极版,没有其他版本来验证这一点。也就是说,在Ultimate中,您可以使用架构资源管理器来查找实现。这比右键点击的方法要复杂一些,但下面是它的工作原理。

  • 转到View->Architecture Explorer(或CTRL-W, N)
  • 单击Class View并在打开的列表中找到包含您的接口的名称空间。
  • 命名空间列表的右侧是一个垂直按钮,上面写着Types。点击这个
  • 选择Interfaces
  • 从列表中选择您的接口
  • 一个写着Members的垂直按钮将出现在右边。点击那个按钮
  • 选择Implemented by(在Inbound Navigation下),它将提供接口的实现列表。
  • 双击实现将带您到类。

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

还有其他工具可以告诉您有关应用程序结构的更多信息,包括哪个类实现哪个接口,哪个方法凌驾于另一个方法之上,等等。我个人更喜欢使用Understand For C/ c++。

我做以下事情:

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

2)展开“Implements x”文件夹,它将显示该方法的所有实现。点击其中一个进入那里。

相对来说又快又简单。令人恼火的是,界面本身似乎并没有相应的功能。


更新:在Visual Studio 2015更新1中,右键单击一个方法并选择go to implementation。你也可以通过工具>选项>环境>键盘将其映射到键盘快捷键并搜索编辑。GoToImplementation命令。默认的快捷方式是Ctrl+F12。(F12将导航到界面)。


在2012终极版中,您可以在解决方案资源管理器中搜索该界面。右键单击该接口并选择“派生类型”,实现的类将显示在解决方案资源管理器中。我不确定快递能不能用。

不。这是不可能的,尽管VS维护了精心设计的内存代码结构,但代码导航相当……吝啬。

似乎唯一的选择是使用“Find All Reference”进行全局搜索,然后手动搜索结果列表以排除类型值声明、转换等,或者在VS中使用代码编辑器以外的其他工具。一切都相当复杂和令人失望。

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

继承裕度- Visual Studio Gallery .

< p > 截图 < br > (来源:microsoft.com) < /订阅>

使用VS2013,你可以把光标放在方法上,并使用导航到…(CTRL+,),它将显示所有声明名称的位置。如果不同的接口使用相同的方法名,则不能很好地工作。

VS2015更新1中,现在有一个新的快捷方式叫做“Go To Implementation”。

对于使用Resharper的人,按CTRL + F12会让你直接进入类方法!

检查这个新的免费Visual Studio 2013扩展- 实现者。 它在Visual Studio编辑器上下文菜单中添加了“转到实现”选项。< / p >

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

Visual Studio 2015 Update 1(2015年12月发布)现在添加了一个标准的右键“转到实现”功能。

Visual Studio更新1现在实现了这个功能!只需右击成员,你应该在“Go to definition”下面看到“Go to implementation”。

更新Visual Studio 2015 - 版本1

你可以使用Edit.GoToImplementationCtrl + F12

它将引导你去实现,就像它将引导你去使用F12的非接口方法一样。