10

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.

Community
  • 1
  • 1
Robbie Dee
  • 1,939
  • 16
  • 43
  • 4
    Might be worth downloading a trial version of ReSharper which has a "go to implementation" and a bunch of other stuff, I don't know how I ever functioned without it. I don't know how to do the same thing in the default IDE – NDJ Apr 05 '13 at 09:46
  • It isn't clear at all. Mismatched braces suggest you haven't posted the whole class `Fruity`, so how can we know you don't have a member function that sets `_Orange` to `new MangoPretendingToBeAnOrange()`? –  Apr 05 '13 at 09:53
  • Seems like a duplicate of: http://stackoverflow.com/questions/4662784/visual-studio-is-there-a-way-to-navigate-to-real-implementation-of-method-behin ? – nicodemus13 Apr 05 '13 at 09:55
  • 2
    I second the notion of using `Resharper`. It's awesomely useful. – Matthew Watson Apr 05 '13 at 09:55
  • 1
    Visual Studio is not complete without ReSharper. When you use ReSharper's **"Go to Implementation"** and there are multiple implementations, it will provide a quick selection list. Other helpful commands in that regard are **"Find Usages"** or **"Inspect Hierarchies"** – bitbonk Apr 05 '13 at 10:03
  • @hvd Apologies, missed the closing brace. I've corrected now... – Robbie Dee Apr 05 '13 at 10:16
  • I've not been a fan of ReSharper in the past, but you're right - having reinstalled it, it does do this... – Robbie Dee Apr 05 '13 at 10:43

5 Answers5

7

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.

laylarenee
  • 3,276
  • 7
  • 32
  • 40
PhonicUK
  • 13,486
  • 4
  • 43
  • 62
  • A `Peel` method could exist for all different fruits, and "Navigate To" doesn't limit itself to classes implementing `IOrange` as far as I know. +1 anyway, if method names are sensible, this shouldn't be a big problem. –  Apr 05 '13 at 09:55
  • Indeed it's definitely not ideal, but it's probably the best option without 3rd party tools. – PhonicUK Apr 05 '13 at 09:57
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).

Matthew Watson
  • 104,400
  • 10
  • 158
  • 276
2

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

Michael Maier
  • 208
  • 2
  • 11
1

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 !

  • Yes, this is a little better than "Find All References", but it lacks the directness of "Go To Definition" which is the sort of thing I was looking for... – Robbie Dee Sep 21 '13 at 13:26
0

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.

Anssssss
  • 3,087
  • 31
  • 40