В Visual Studio, когда вы щелкаете правой кнопкой мыши вызов метода, вы переходите к реализации этого метода внутри класса, за исключением случаев, когда вы обращаетесь к этому методу через интерфейс: в этом случае вы переходите к методу интерфейса, а не к реальной реализации.
Есть ли способ / советы (сочетание клавиш или что-то еще), чтобы получить доступ к этой фактической реализации? В противном случае вы застряли, чтобы добавить комментарий, просто чтобы вспомнить, где вы его реализовали, что на самом деле не продуктивно и подвержено ошибкам!
Обновление: интересные ответы, но я не очень доволен, потому что все они громоздки. Я приведу точный пример:
IInterface iInterface = someObject;
iInterface.someMethod();
На самом деле, если бы Visual Studio был чуть-чуть умнее, чтобы посмотреть только одну строку над вызовом метода, он бы увидел, где находится настоящий объект. И это избавило бы меня от множества нажатий клавиш и позволило бы избежать использования «найти все ссылки», а затем сканировать строки усталыми глазами, чтобы увидеть, какая строка содержит правильную :)
источник
Ответы:
Я делаю следующее:
1) Щелкните правой кнопкой мыши по методу и выберите «Просмотр иерархии вызовов» (или сочетание клавиш Ctrl + K, Ctrl + T).
2) Разверните папку «Implements x», которая покажет вам все реализации этого метода. Нажмите на один, чтобы перейти туда.
Относительно быстро и легко. Раздражает, хотя, кажется, нет эквивалента для самого интерфейса.
обновление : начиная с Visual Studio 2015, обновление 1, щелкните правой кнопкой мыши метод и выберите Перейти к реализации. Вы также можете сопоставить его с сочетанием клавиш через Инструменты> Параметры> Среда> Клавиатура и выполнить поиск команды Edit.GoToImplementation. По умолчанию ярлык есть
Ctrl+F12
. (F12
перейдем к интерфейсу).источник
С VS2013 можно навести курсор на метод и использовать Navigate To ... (CTRL +,), и он отобразит все места, где объявлено имя. Не работает, если разные интерфейсы используют одни и те же имена методов.
В VS2015 Update 1 появился новый ярлык под названием «Перейти к реализации».
источник
Edit.NavigateTo
:)Я создал бесплатное расширение для Visual Studio 2010 и Visual Studio 2012 под названием Inheritance Margin, чтобы обеспечить эту особую функцию, а также дать четкое указание, когда метод реализует метод интерфейса из-за совпадения сигнатуры. В текущей версии вы можете щелкнуть правой кнопкой мыши на любом глифе, чтобы получить меню элементов для навигации.
Маржа наследования - галерея Visual Studio
(источник: microsoft.com )
источник
Щелкните правой кнопкой мыши, затем «Найти все ссылки».
Это отобразит строку кода для всех мест, где используется метод, включая объявление интерфейса и реализации метода интерфейса. Затем вы можете нажать на строку, чтобы перейти к расположению кода.
источник
Shift + F12
.В зависимости от версии Visual Studio, которая у вас есть, я условно скажу «да».
В настоящее время я работаю на Ultimate, и у меня нет других версий, чтобы это проверить. Тем не менее, в Ultimate вы можете использовать Architecture 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 заставит вас перейти непосредственно к методу класса!
источник
Это невозможно. То, что вы описываете, будет иметь смысл, только если интерфейс будет ограничен одной реализацией.
Рассмотрим этот пример:
Если вы используете go для реализации Write в UseIWrite, вы переходите к объявлению интерфейса, потому что в этот момент любая из реализаций IWrite может быть передана в метод.
К счастью, некоторые инструменты, такие как, например, ReSharper, предлагают вам найти все способы использования метода, чтобы вы могли легко перейти к желаемой реализации.
источник
Visual Studio с обновлением 1 теперь реализует эту функцию! Просто щелкните правой кнопкой мыши на члене, и вы должны увидеть «Перейти к реализации» прямо под «Перейти к определению».
источник
Проверьте это новое бесплатное расширение Visual Studio 2013 - Implementator . Он добавляет опцию «Перейти к реализации» в контекстное меню редактора Visual Studio.
Он не так надежен и быстр, как Resharper, но отлично справляется со своей задачей.
источник
Вы можете попробовать
Ctrl + F12
ярлык. Это приведет вас к реализации так же, как это приведет вас к неинтерфейсным методам, использующим F12. [Я пробовал это в VS 2017, не уверен насчет других версий]источник
Visual Studio может только сказать вам, где на нее ссылаются, но это может быть слишком грубым.
Существуют и другие инструменты, которые могут рассказать вам больше о структуре вашего приложения, в том числе о том, какой класс реализует какой интерфейс, какой метод отменяет какой другой метод и так далее. Я лично предпочитаю использовать Understand For C / C ++.
источник
Переход к объявлению откроет метод интерфейса. Переходя к реализации, вы получите или перечислите классы, которые реализуют код для этого метода интерфейса (а не сам метод интерфейса).
Обновить
Как отметил Джон Скит в комментариях (а я пропустил, прежде чем ответить), описанная мною функция может быть функцией ReSharper, а не Visual Studio.
источник
Нет. Это невозможно, несмотря на сложную структуру кода в памяти, поддерживаемую VS, навигация по коду довольно ... скупа.
Кажется, единственной альтернативой является глобальный поиск с «Find All Reference», за которым следует ручной поиск в результирующем списке, чтобы исключить объявления типичных значений, преобразования и т. Д. Или использование других инструментов внутри VS, кроме редактора кода. Все довольно сложно и неутешительно.
источник