Перейдите к реализованному методу, а не интерфейсу
Часто при просмотре кода я сталкиваюсь с чем-то вроде этого:
public class Fruity
{
private IOrange _Orange;
public Fruity()
{
_Orange = new Orange() as IOrange;
}
public void PrepareFruit()
{
return _Orange.Peel();
}
}
Отлично, теперь я хочу посмотреть, как реализован метод Peel. Щелчок правой кнопкой мыши по методу дает мне Go To Definition, которое приводит меня к заглушке интерфейса.
ОК, строго говоря, определение приписывается интерфейсом, учитывая, что личная переменная определена таким образом, но есть ли способ просто перейти к реализации?
Существует, конечно, "Найти все ссылки", который представляет собой подход к вызовам, интерфейсам и конкрециям с разбросом. Но источник реализации в этом случае очевиден, поэтому я должен был бы перейти к нему, я бы подумал...
Очевидно, иногда может быть двусмысленность, которая здесь хорошо описана:
Перейти к определению для конкретного типа
Но, конечно, должна быть опция Go To Implementation, когда реализация кристально чиста.
Ответы
Ответ 1
Если вы дважды щелкните или выделите Peel
и нажмите CTRL+,
, вы получите окно "перейти к символу", в котором будет отображаться фактическая реализация, обычно как второй элемент. Это самый быстрый способ найти его без сторонних инструментов. И в отличие от "найти все ссылки", он показывает только определения метода, а не там, где он назывался.
Ответ 2
Если вы перейдете в меню Visual Studio "Вид" и выберите "Окно определения кода", при нажатии кнопки .Peel()
вам может быть показана реализация .Peel()
(это не всегда работает, но попробуйте и см.).
Ответ 3
Конечно, уже существует в Visual Studio! Он существует с тех пор.
Щелкните правой кнопкой мыши на своем коде (Ex: property) и выберите "Просмотреть иерархию вызовов". В окне "Иерархия вызовов" выберите папку "Реализации".
Вот ты. Почему Resharper???
Разумеется, это не так сложно, как перейти к реализации из 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 (в любом месте - внутри класса или внутри интерфейса) и выберите "Просмотреть иерархию вызовов", должен сказать, какой класс его реализует, и, следовательно, весь интерфейс.
В начале мы все любим Решара, со временем мы все ненавидим!
Ответ 4
Visual Studio 2015 может сделать это с расширением "Go To Implementation" - https://visualstudiogallery.msdn.microsoft.com/0ed93222-83cd-4db3-92bc-a78909047156
Если существует несколько реализаций, он покажет вам список, чтобы вы могли выбрать, к которому нужно перейти.
Ответ 5
С Visual Studio >= 2015 вы можете перейти к реализации с помощью сочетаний клавиш Ctrl + F12