【问题标题】:Go to implemented method rather than interface转到实现的方法而不是接口
【发布时间】:2013-03-27 16:12:49
【问题描述】:

在浏览代码时,我经常会遇到这样的情况:

public class Fruity
{
    private IOrange _Orange;

    public Fruity()
    {
        _Orange = new Orange() as IOrange;
    }

    public void PrepareFruit()
    {
        return _Orange.Peel();
    }
}

太好了,所以现在我想看看 Peel 方法是如何实现的。右键单击该方法可以让我转到定义,这会将我带到接口存根。

好的,严格来说,定义是由接口赋予的,因为私有变量是这样定义的,但是有什么方法可以直接去实现吗?

当然还有 Find All References,它是调用、接口和具体化的分散枪法。但是在这种情况下,实现的来源是显而易见的,所以我应该能够跳到我想的......

显然,有时可能会出现模棱两可的情况,这里对此进行了很好的描述:

Go to definition on concrete type

当然,当实现非常清晰时,应该有一个 Go To Implementation 选项。

【问题讨论】:

  • 可能值得下载 ReSharper 的试用版,它具有“开始实施”和一堆其他东西,我不知道没有它我是如何运作的。我不知道如何在默认 IDE 中做同样的事情
  • 一点都不清楚。不匹配的大括号表明您还没有发布整个班级Fruity,那么我们怎么知道您没有将_Orange 设置为new MangoPretendingToBeAnOrange() 的成员函数?
  • 似乎与以下内容重复:stackoverflow.com/questions/4662784/… ?
  • 我赞同使用Resharper 的想法。它非常有用。
  • 没有 ReSharper,Visual Studio 是不完整的。当您使用 ReSharper 的 “Go to Implementation” 并且有多个实现时,它会提供一个快速选择列表。在这方面其他有用的命令是 “Find Usages”“Inspect Hierarchies”

标签: c# visual-studio-2010 class interface


【解决方案1】:

如果您双击或突出显示Peel 并按下CTRL+,,您将获得“导航到符号”窗口,该窗口将列出实际实现,通常作为第二项。这是在没有 3rd 方工具的情况下找到它的最快方法。并且与“查找所有引用”不同,它只显示方法定义,而不显示它的调用位置。

【讨论】:

  • A Peel 方法可能适用于所有不同的水果,据我所知,“导航到”并不局限于实现 IOrange 的类。无论如何+1,如果方法名称是明智的,这应该不是一个大问题。
  • 确实不理想,但它可能是没有第三方工具的最佳选择。
【解决方案2】:

如果您转到 Visual Studio 菜单“查看”并选择“代码定义窗口”,当您单击 .Peel() 时,您可能会看到 .Peel() 的实现(这并不总是有效,但请尝试一下看看)。

【讨论】:

    【解决方案3】:

    当然已经存在于 Visual Studio 中!从那时起它就在那里。

    右键单击您的代码(例如:属性)并选择“查看调用层次结构”。在 Call Hierarchy 窗口中选择 Implements 文件夹。

    你来了。为什么要锐化??? 当然并不像从允许直接询问接口的 resharper 实现那样复杂,但只有一个属性或来自该接口的方法就足够了。例如:

    public interface IModule
    {
    int Count { get; set; }
    }
    
    public class Module : Imodule
    { 
      public int Count {get; set;}
    }
    
    public class Module2 : Imodule
    { 
       public int Count {get; set;}  
    }
    

    右键单击 Count 属性(在类内或接口内的任意位置)并选择“查看调用层次结构”,应该会显示哪个类实现了它,因此会显示整个接口。

    一开始我们都喜欢Resharper,随着时间的推移,我们都讨厌它!

    【讨论】:

    • 是的,这比“查找所有引用”要好一些,但它缺乏“转到定义”的直接性,而这是我一直在寻找的那种东西......
    【解决方案4】:

    使用 Visual Studio >= 2015,您可以使用快捷键 ctrl + F12 跳转到实现

    【讨论】:

      【解决方案5】:

      Visual Studio 2015 可以通过“Go To Implementation”扩展来做到这一点 - https://visualstudiogallery.msdn.microsoft.com/0ed93222-83cd-4db3-92bc-a78909047156

      如果有多个实现,它会显示一个列表,以便您选择跳转到哪个。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2022-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-01-23
        • 1970-01-01
        • 2016-06-20
        • 1970-01-01
        相关资源
        最近更新 更多