В Visual Studio при щелчке правой кнопкой мыши по вызову метода вы переходите к реализации этого метода внутри класса, за исключением того, что вы получаете доступ к этому методу через интерфейс: в этом случае вы переходите к методу интерфейса не к фактическому реализация.
Есть ли способ/советы (ключевой ярлык или что-то еще) для доступа к этой фактической реализации? В противном случае вы застряли, чтобы добавить комментарий, чтобы помнить, где вы его реализовали, что действительно непродуктивно и подвержено ошибкам!
Обновление: интересные ответы, но я не очень доволен, потому что все они громоздки. Я приведу точный пример:
IInterface iInterface = someObject;
iInterface.someMethod();
На самом деле, если Visual Studio было просто немного умно, чтобы посмотреть только одну строку над вызовом метода, он увидит, где находится реальный объект. И это спасло бы мне много нажатий клавиш и избегало бы использовать "найти все ссылки", а затем просканировать строки усталыми глазами, чтобы увидеть, какая строка содержит правильную:)
Я делаю следующее:
1) Щелкните правой кнопкой мыши на методе и выберите "Просмотреть иерархию вызовов" (или сочетание клавиш Ctrl + K, Ctrl + T)
2) Разверните папку "Реализует x", которая затем покажет вам все реализации этого метода. Нажмите на один, чтобы перейти туда.
Относительно быстро и легко. Раздражающе, хотя, похоже, не существует эквивалента для самого интерфейса.
update: начиная с обновления Visual Studio 2015 1, щелкните правой кнопкой мыши на методе и выберите переход к реализации. Вы также можете сопоставить его с сочетанием клавиш с помощью "Сервис" > "Параметры" > "Среда" > "Клавиатура" и выполните команду "Редактировать". Ярлык по умолчанию - Ctrl+F12
. (F12
будет перемещаться по интерфейсу).
С VS2013 можно поместить курсор над методом и использовать Navigate To... (CTRL +,), и он отобразит все местоположения, где объявлено имя. Не работает, если разные интерфейсы используют одни и те же имена методов.
С VS2015 Update 1 теперь появился новый ярлык под названием "Перейти к реализации".
Я создал бесплатное расширение для Visual Studio 2010 и Visual Studio 2012 с именем Inheritance Margin, чтобы предоставить эту конкретную функцию, а также дать четкое указание, когда метод реализует метод интерфейса из-за соответствия подписи. В текущей версии вы можете щелкнуть правой кнопкой мыши по любому глифу, чтобы получить меню элементов для навигации.
Наследование - Галерея Visual Studio
Щелкните правой кнопкой мыши "Найти все ссылки".
Это отобразит строку кода для всех мест, где используется метод, включая объявление интерфейса и реализации метода интерфейса. Затем вы можете щелкнуть по строке, чтобы перейти к коду.
В зависимости от версии Visual Studio, которую у вас есть, я скажу условно "да".
В настоящее время я работаю на Ultimate, и у меня нет других версий для проверки этого. Тем не менее, в Ultimate вы можете использовать Explorer для поиска реализаций. Это немного больше, чем метод правого щелчка, но здесь, как это работает.
View->Architecture Explorer
(или CTRL-W, N)Types
. Нажмите здесьInterfaces
Members
. Нажмите эту кнопкуImplemented by
(под Inbound Navigation
) и предоставит список реализаций вашего интерфейса.В течение 2012 Ultimate вы можете искать интерфейс в браузере решений. Щелкните правой кнопкой мыши по интерфейсу и выберите "Производные типы", реализованные классы будут показаны в браузере решений. Не уверен, что он работает в экспресс.
Обновление Visual Studio 2015 Update 1 (выпущено в декабре 2015 г.) теперь добавило в качестве стандарта функцию "Переход к внедрению" правой кнопкой мыши.
Для людей, которые используют Resharper, нажатие CTRL + F12 заставит вас перейти непосредственно к методу класса!
Это невозможно. То, что вы описываете, будет иметь смысл только в том случае, если интерфейс будет ограничен 1 реализацией.
Рассмотрим следующий пример:
interface IWrite
{
void Write();
}
class A : IWrite {
public void Write() { Console.WriteLine("A"); }
}
class B : IWrite {
public void Write() { Console.WriteLine("B"); }
}
class X : IWrite {
private readonly string _x;
public X(string x) {
_x = x;
}
public void Write() { Console.WriteLine(_x); }
}
class UseIWrite()
{
public void Use(IWrite iwrite)
{
iwrite.Write();
}
}
Если вы используете переход к реализации Write in UseIWrite, он приведет вас к объявлению интерфейса, потому что в этот момент в метод можно передать любую реализацию IWrite.
К счастью, некоторые инструменты, например, ReSharper, предлагают вам найти все способы использования метода, поэтому вы можете легко перейти к желаемой реализации.
Visual Studio с обновлением 1 теперь реализует эту функцию! Просто щелкните правой кнопкой мыши на элементе, и вы увидите "Перейти к реализации" в разделе "Перейти к определению".
Ознакомьтесь с новой бесплатной версией Visual Studio 2013 - Реализатор. Он добавляет параметр "Перейти к реализации" в контекстное меню редактора Visual Studio.
Это не так надежно и быстро, как Resharper, но работает ли это нормально.
Visual Studio может только сообщать вам, где она указана, но это может быть слишком грубо.
Существуют и другие инструменты, которые могут рассказать вам больше о структуре вашего приложения, включая класс, который реализует интерфейс, какой метод перекрывает другой метод и т.д. Я лично предпочитаю использовать Understand для C/С++.
Переход к объявлению откроет метод интерфейса. Перейдя к реализации, вы получите или перечислите для вас классы, реализующие код для этого метода интерфейса (а не сам интерфейс).
Обновление
Как отметил Джон Скит в комментариях (и я пропустил перед ответом), описанная выше функция может быть функцией ReSharper... не Visual Studio.
Нет. Это невозможно, несмотря на сложную структуру кода памяти, поддерживаемую VS, навигацию по коду довольно... скупо.
Кажется, единственной альтернативой является глобальный поиск с помощью "Найти все ссылки", за которым следует ручной поиск результирующего списка, чтобы исключить объявления типизированных значений, преобразования и т.д. или использование других инструментов в VS, кроме редактора кода, Все довольно сложно и неутешительно.