Перейдите к реализованному методу, а не интерфейсу

Часто при просмотре кода я сталкиваюсь с чем-то вроде этого:

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 (в любом месте - внутри класса или внутри интерфейса) и выберите "Просмотреть иерархию вызовов", должен сказать, какой класс его реализует, и, следовательно, весь интерфейс.

В начале мы все любим Решара, со временем мы все ненавидим!

Ответ 5

С Visual Studio >= 2015 вы можете перейти к реализации с помощью сочетаний клавиш Ctrl + F12