Go to implemented method rather than interface

2019-03-26 03:46发布

问题:

Oftentimes when browsing code, I'll come across something like this:

public class Fruity
{
    private IOrange _Orange;

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

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

Great, so now I want to see how the Peel method is implemented. Right-clicking on the method gives me Go To Definition which takes me to the interface stub.

OK, strictly speaking, the definition is ascribed by the interface given that the private variable is defined in this way, but is there any way to just go to the implementation?

There is of course Find All References which is a scatter-gun approach of calls, interfaces and concretions. But the source of the implementation is obvious in this case so I should be able to jump to it I'd have thought...

Evidently, there can sometimes be ambiguity which is described nicely here:

Go to definition on concrete type

But surely, there should be a Go To Implementation option when the implementation is crystal clear.

回答1:

If you double-click or highlight Peel and press CTRL+, you'll get the "navigate to symbol" window which will list the actual implementation, usually as the second item. It's about the fastest way of finding it without 3rd party tools. And unlike "find all references", it only shows the method definitions and not wherever it's called.



回答2:

If you go to the Visual Studio menu "View" and select "Code Definition Window", when you click on .Peel() you might be shown the implementation of .Peel() (this doesn't always work, but try it and see).



回答3:

Of course already exists in Visual Studio ! It is there since ever.

Right click on your code (Ex: property) an select "View Call Hierarchy". In Call Hierarchy window select the Implements folder.

There you are. Why Resharper ??? Of course is not that complex as go to implementation from resharper which allows direct interrogation on interface, but only a property, or a method from that interface should be enough. Ex:

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;}  
}

Right click on the Count property (anywhere - inside the class or inside the interface) and select "View Call Hierarchy", should say which class implements it, and therefore the whole Interface.

At the beginning we all love Resharper, with time, we all hate it !



回答4:

Visual Studio 2015 can do this with the "Go To Implementation" extension - https://visualstudiogallery.msdn.microsoft.com/0ed93222-83cd-4db3-92bc-a78909047156

If there are multiple implementations, it will show you a list so you can pick which to jump to.



回答5:

With Visual Studio >= 2015 you can jump to implementation with shortcut keys ctrl + F12