Как вы находите все реализации интерфейса?
Предположим, что у вас есть интерфейс, определенный в С#. Какой самый простой способ найти все классы, обеспечивающие реализацию интерфейса?
Метод грубой силы должен использовать "Найти ссылки" в Visual Studio и вручную просмотреть результаты, чтобы отделить использование от реализаций, но для интерфейса в большой базе кода, на которую в значительной степени ссылаются относительно небольшие реализации, это может занять много времени и подвержено ошибкам.
В Java запуск javadoc на базе кода (с использованием опции -private для включения частных классов) приведет к созданию страницы документации для интерфейса (например, Comparable), который включает в себя все реализующие классы для интерфейса, а также любые подинтерфейсы (хотя он не включает в себя реализации классов подинтерфейсов, их относительно легко определить, свернув вниз в перечисленные подинтерфейсы). Это такая функциональность, которую я ищу, но с С# и Visual Studio.
Ответы
Ответ 1
(Изменить на основе комментария...)
Если у вас установлен ReSharper:
В Visual Studio щелкните правой кнопкой мыши имя типа и выберите "Перейти к Inheritor". Кроме того, выберите имя типа, затем перейдите в ReSharper/View/Type Hierarchy, чтобы открыть новую вкладку. (В меню вы увидите комбинацию клавиш - это может меняться, поэтому я объяснил, как ее найти:)
Если у вас нет ReSharper:
- Вы можете использовать Reflector, который может очень легко показать вам всю иерархию типов - просто под типом имя являются расширяемыми элементами для базовых типов и производных типов. Аналогичные инструменты доступны, например ILSpy и dotPeek.
- Купить ReSharper - это отличный инструмент:)
Ответ 2
Вы можете щелкнуть имя метода (определение в интерфейсе или реализацию в другом классе) и выбрать "Просмотр иерархии вызовов". В окне "Иерархия вызовов" есть папка "Реализации", где вы можете найти все местоположения реализации метода интерфейса.
Ответ 3
С Visual Studio 2010 +
Щелкните правой кнопкой мыши метод-член и выберите иерархию запросов просмотра. Разверните папку "Реализации". В нем перечислены все типы, реализующие интерфейс, к которому принадлежит метод.
![enter image description here]()
С Resharper 7
Щелкните правой кнопкой мыши по интерфейсу > Перейдите к > Производные символы. Символы, перечисленные в жирный, выводятся непосредственно из интерфейса. Полужирные символы выводятся из суперкласса.
![enter image description here]()
Ответ 4
Поместите курсор в класс или тип интерфейса и
CTRL + F12
Ответ 5
Для тех, кто использует Visual Studio 2015, есть это удивительное расширение, называемое Переход к реализации. Попробуйте.
После того, как вы установили расширение, вы можете просто щелкнуть правой кнопкой мыши на любом вхождении интерфейса (например, IUrlShortener) и щелкнуть по меню Go To Implementation
. Если у вас есть только один класс, который реализует интерфейс, щелчок по меню приведет вас непосредственно к классу. Если у вас более одного класса, реализующего интерфейс, он будет перечислять все классы.
Ответ 6
Для тех, кто использует Visual Studio 2015, установите Visual Studio 2015 Update 1 RC. Из Блог Visual Studio:
Сегодня мы выпустили Visual Studio 2015 Update 1 RC, который основывается на обновлении CTP, который мы выпустили три недели назад. В дополнение к функциям, введенным в CTP, как описано здесь, Кандидат на выпуск включает в себя следующее:
- Перейти к реализации. Функция, которую многие из вас ждут: просто щелкните правой кнопкой мыши по интерфейсу или абстрактному методу и выберите эту команду, чтобы перейти к реализации.
Ответ 7
Я не думаю, что эта функциональность встроена в VS, но IIRC Resharper имеет это.
Ответ 8
Вы можете выполнить поиск регулярного выражения для интерфейса.
:(\ *[^},]+,)*\ *IMyInterfaceName
CTRL + SHIFT + F запускает следующее окно:
![Visual Studio Screenshot]()
Ответ 9
Я предпочитаю вариант "Навигация до...". Наведите курсор на вызов функции, попробуйте следующее:
Быстрая клавиша:
- Ctrl+, (Ctrl+ запятая)
Меню:
- Редактировать меню
- Нажмите "Перейти к..."
Выгоды:
- Не отображаются все ссылки типа "Найти все ссылки"
- Показывает "тип" реализации, поэтому он заметит, какой у вас интерфейс
Ответ 10
Используйте Shift + F12, чтобы показать все ссылки, включая определения.
Ответ 11
Если вы используете resharper ALT + END, ярлык может помочь найти все Наследующие.
Ответ 12
Я слышал, сказать (нет опыта сам), что Doxygen для.Net, как Javadoc для Java.