Вопрос

Предположим, у вас есть интерфейс, определенный на 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 запускает следующее окно:

Снимок экрана Visual Studio

Я предпочитаю вариант «Перейти к...».Наведя курсор на вызов функции, попробуйте следующее:

Быстрая клавиша:

  1. Ctrl+, (Ctrl+запятая)

Меню:

  1. Меню редактирования
  2. Нажмите «Перейти к...».

Преимущества:

  • Не показывает все ссылки, например «Найти все ссылки».
  • Показывает "type" реализации, чтобы он отметил, какой интерфейс у вас

Используйте Shift + F12, чтобы показать все ссылки, включая определения.

Если вы используете ярлык resharper ALT + END , это может помочь найти все наследники.

Я слышал, что сказал (без собственного опыта), что doxygen относится к .Net так же, как javadoc - к Java.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top