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.
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.
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).
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 !
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.
With Visual Studio >= 2015 you can jump to implementation with shortcut keys ctrl + F12