Как найти все реализации интерфейса?
-
05-07-2019 - |
Вопрос
Предположим, у вас есть интерфейс, определенный на C#.Какой самый простой способ найти все классы, обеспечивающие реализацию интерфейса?
Методом грубой силы было бы использовать «Найти ссылки» в Visual Studio и вручную просмотреть результаты, чтобы отделить использование от реализаций, но для интерфейса в большой кодовой базе, которая сильно загружена. упоминается при относительно небольшом количестве реализаций это может занять много времени и привести к ошибкам.
В Java запуск javadoc в базе кода (с использованием опции -private для включения частных классов) создаст страницу документации для интерфейса (например, Сопоставимый), который включает в себя все классы реализации интерфейса, а также все подинтерфейсы (хотя он не включает классы реализации подинтерфейсов, их относительно легко определить, углубившись в перечисленные подинтерфейсы).Именно эту функциональность я ищу, но с C# и Visual Studio.
Решение
(Изменить на основе комментария...)
Если у вас установлен ReSharper:
В Visual Studio щелкните правой кнопкой мыши имя типа и выберите «Перейти к наследнику».Либо выберите имя типа, затем перейдите в ReSharper/View/Type Hierarchy, чтобы открыть новую вкладку.(В меню вы увидите сочетание клавиш — оно может различаться, поэтому я объяснил, как его найти :)
Если у вас нет ReSharper:
- Вы можете использовать Отражатель, который может очень легко показать вам всю иерархию типов — прямо под именем типа находятся расширяемые элементы для базовых типов и производных типов.Доступны аналогичные инструменты, такие как ILSpy и dotPeek.
- Купите ReSharper — отличный инструмент :)
Другие советы
Можно щелкнуть правой кнопкой мыши имя метода (определение в интерфейсе или реализацию в другом классе) и выбрать «Просмотреть иерархию вызовов». В окне «Иерархия вызовов» есть «Реализации». папка, в которой можно найти все места реализации метода интерфейса.
Установите курсор на класс или тип интерфейса и
CTRL + F12
С Visual Studio 2010 +
Щелкните правой кнопкой мыши метод члена и выберите просмотр иерархии вызовов. Разверните папку «Агрегаты». В этом списке перечислены все типы, которые реализуют интерфейс, к которому принадлежит метод.
С Resharper 7
Щелкните правой кнопкой мыши интерфейс > Перейдите к > Производные символы. Символы, перечисленные в полужирном , получены непосредственно из интерфейса. Нежирные символы происходят от суперкласса.
Для тех, кто использует Visual Studio 2015, есть это удивительное расширение, называемое Перейти к реализации . Попробуйте.
Установив расширение, вы можете просто щелкнуть правой кнопкой мыши в любом месте интерфейса (например, IUrlShortener) и выбрать меню Перейти к реализации
. Если у вас есть только один класс, который реализует интерфейс, щелкнув по меню, вы попадете прямо в класс. Если у вас есть более одного класса, который реализует интерфейс, он перечислит все классы.
Для тех, кто использует Visual Studio 2015, установите Visual Studio 2015 Update 1 RC.Из Блог Visual Studio:
Сегодня мы выпустили версию-кандидат обновления 1 для Visual Studio 2015, основанную на CTP-версии обновления 1, которую мы выпустили три недели назад.Помимо функций, представленных в CTP, как описано здесь, Release Candidate включает в себя следующее:
- Перейти к реализации.Функция, которую многие из вас ждали:просто щелкните правой кнопкой мыши интерфейс или абстрактный метод и выберите эту команду, чтобы перейти к реализации.
Я не думаю, что эта функция встроена в VS, но IIRC Resharper имеет это. р>
Вы можете выполнить поиск интерфейса по регулярному выражению.
:(\ *[^},]+,)*\ *IMyInterfaceName
CTRL + SHIFT + F запускает следующее окно:
Я предпочитаю вариант «Перейти к...».Наведя курсор на вызов функции, попробуйте следующее:
Быстрая клавиша:
- Ctrl+, (Ctrl+запятая)
Меню:
- Меню редактирования
- Нажмите «Перейти к...».
Преимущества:
- Не показывает все ссылки, например «Найти все ссылки».
- Показывает "type" реализации, чтобы он отметил, какой интерфейс у вас
Используйте Shift + F12, чтобы показать все ссылки, включая определения.
Если вы используете ярлык resharper ALT + END , это может помочь найти все наследники.
Я слышал, что сказал (без собственного опыта), что doxygen относится к .Net так же, как javadoc - к Java.