Как в Visual Studio показать все классы, унаследованные от базового класса?
Например , в ASP.NET MVC есть несколько типов ActionResult , и все они наследуются от базового класса или реализуют его ActionResult
.
Похоже, что если вы просто не «знаете», что View
и Json
являются действительными ActionResult
типами, вы не сможете легко найти эту информацию.
Пожалуйста, докажите, что я ошибаюсь.
Есть ли в обозревателе объектов что-то, что позволяет легко это узнать?
Я даже готов предложить инструменты за пределами Visual Studio, чтобы найти эту информацию о различных классах. Например: есть ли что-то в Resharper, что мне поможет?
visual-studio
class
abstract-class
Дэн Эспарса
источник
источник
Ответы:
Конечно, Resharper может это сделать. И многое другое.
Просто щелкните правой кнопкой мыши имя типа в любом месте и выберите «Перейти к наследнику» в контекстном меню. «Перейти к наследнику» также может применяться к методу перехода к переопределениям и реализациям метода интерфейса. Для интерфейса вы можете снова вызвать «Расширенный поиск использования», просто щелкнув правой кнопкой мыши), где можно найти все расширения и реализации. Для типа - производные типы. И моя любимая функция - щелкните любой тип / метод, удерживая Control, для перехода к его объявлению.
Я считаю, что это незаменимый инструмент для разработчиков .net.
В Resharper 9.2 для любого типа исходного кода щелкните правой кнопкой мыши «Найти использование дополнительно», выберите Find = «Derived» и Scope = «Solutions and Libraries».
Например, чтобы найти всех наследников (как в библиотеке, так и в вашем коде) некоторого базового класса во включенной DLL от любого поставщика, объявите в своем коде переменную с этим базовым классом. Затем щелкните правой кнопкой мыши имя только что введенного базового класса.
источник
Для VS2012,
источник
Для этого вам не обязательно нужен Reflector - представление Visual Studio «Диаграмма классов» позволит вам легко найти все производные классы для определенного класса. Щелкните правой кнопкой мыши класс в «Представлении классов» и выберите «Просмотреть диаграмму классов». Если диаграмма не показывает уровень детализации, который вы хотите для иерархии, щелкните правой кнопкой мыши поле для класса на диаграмме и выберите «Показать производные классы».
Может быть, не так прямолинейно, как Resharper, но это вариант, если у вас еще нет R #.
К сожалению, я не уверен, в каких именно версиях Visual Studio он есть.
источник
Это наименее ленивый ответ (я просто горжусь этим ответом :)
ReSharper у меня нет, раньше пробовал, но покупать не хотелось. Я пробовал использовать диаграмму классов, но это совсем не практично, потому что диаграмма иерархии охватывает мир в 3 раза, а экран моего ноутбука не имеет бесконечной ширины. Поэтому моим естественным и простым решением было написать код Windows Forms для перебора типов в сборке и использования отражения для добавления узлов в древовидное представление, как показано ниже:
предположим, что у вас есть текстовое поле, древовидное представление и другие вещи, необходимые для формы, в которой выполняется этот код.
//Go through all the types and either add them to a tree node, or add a tree //node or more to them depending whether the type is a base or derived class. //If neither base or derived, just add them to the dictionary so that they be //checked in the next iterations for being a parent a child or just remain a //root level node. var types = typeof(TYPEOFASSEMBLY).Assembly.GetExportedTypes().ToList(); Dictionary<Type, TreeNode> typeTreeDictionary = new Dictionary<Type, TreeNode>(); foreach (var t in types) { var tTreeNode = FromType(t); typeTreeDictionary.Add(t, tTreeNode); //either a parent or a child, never in between bool foundPlaceAsParent = false; bool foundPlaceAsChild = false; foreach (var d in typeTreeDictionary.Keys) { if (d.BaseType.Equals(t)) { //t is parent to d foundPlaceAsParent = true; tTreeNode.Nodes.Add(typeTreeDictionary[d]); //typeTreeDictionary.Remove(d); } else if (t.BaseType.Equals(d)) { //t is child to d foundPlaceAsChild = true; typeTreeDictionary[d].Nodes.Add(tTreeNode); } } if (!foundPlaceAsParent && !foundPlaceAsChild) { //classHierarchyTreeView.Nodes.Add(tn); } } foreach (var t in typeTreeDictionary.Keys) { if (typeTreeDictionary[t].Level == 0) { classHierarchyTreeView.Nodes.Add(typeTreeDictionary[t]); } } StringBuilder sb = new StringBuilder(); foreach (TreeNode t in classHierarchyTreeView.Nodes) { sb.Append(GetStringRepresentation(t, 0)); } textBox2.Text = sb.ToString();
источник
AppDomain.CurrentDomain.GetAssemblies()
? Взгляните на это: stackoverflow.com/questions/851248/…Начиная с «Visual Studio 2015 Update 1», вы можете просто щелкнуть правой кнопкой мыши имя класса в редакторе кода класса и затем выбрать «Перейти к реализации» из контекстного меню: Ctrl + F12 является ярлыком.
См. Https://blogs.msdn.microsoft.com/dotnet/2015/11/30/whats-new-in-visual-studio-update-1-for-net-managed-languages/ для получения дополнительных сведений.
источник
Об этом пока никто не упомянул, поэтому добавлю.
Jetbrains dotPeek - бесплатный декомпилятор .NET, способный легко отображать эту информацию.
Бесплатная загрузка: http://www.jetbrains.com/decompiler/
Jetbrains - это компания, которая делает Resharper.
Шаги по поиску производных классов:
ActionResult
ActionResult
объявлении класса щелкните правой кнопкой мыши и выберите «Производные символы».источник
Предполагая, что у вас есть Resharper установлен : курсор на класс / интерфейс, щелкните правой кнопкой мыши - Проверить - Иерархии
Здесь показаны подклассы, реализации и суперклассы.
источник
В представлении классов Visual Studio перейдите к интересующему вас классу и найдите его базовый и производный классы.
источник
Вы также можете использовать Reflector .
Загрузите все сборки, которые вы хотите просмотреть, перейдите к типу и разверните элемент Производные типы.
Вы также можете сделать это в обозревателе объектов, но по какой-то причине VS2008 может сделать это только в одном из представлений .Net Framework. (VS2010 Beta 2 может делать это в любом виде)
источник
Для классов Framework я использую библиотеку MSDN. Раздел «Иерархия наследования» работает в обоих направлениях. По общему признанию, это не очень помогает для некоторых сторонних библиотек.
источник
С помощью ReSharper (версия 2016.1.2) просто Ctrl+ Alt+ Clickк базовому классу. Вы увидите что-то вроде этого:
источник
Перетащите класс или пространство имен из обозревателя объектов в класс Digram файл .
Как получить красивую диаграмму классов для встроенных классов .net?
источник
выберите тип и щелкните правой кнопкой мыши, чтобы увидеть что-нибудь --- показать на карте кода - опция выберите, чтобы сгенерировать форму изображения для тех, кто наследует этот тип, как очень красивое изображение, так как формат файла .dgml дает гораздо больше информации о типе
источник
В качестве опции для тех, кто использует Visual Assist, вы также можете нажать Shift + ALT + G (пока курсор находится на имени класса), чтобы вызвать контекстное меню «Перейти к связанным», и если есть производные классы, вы получите подменю для этого он перечисляет их все и даже показывает структуры наследования среди этих производных классов.
источник
Просто закодируйте это.
источник
если вы обновились до VS2012, вы можете использовать «Карту кода».
Щелкните правой кнопкой мыши тип, иерархию наследования которого вы хотите просмотреть, и выберите «Добавить в карту кода». Затем в представлении карты кода вы можете развернуть узлы и щелкнуть правой кнопкой мыши, чтобы выбрать «Показать производные / базовые классы». К сожалению, это не работает для классов, предоставляемых .NET.
источник
Для Visual Studio 2012 ( без ReSharper )
источник
Обновление 2020:
Вы можете использовать карты кода Visual Studio которые работают очень хорошо.
Просто щелкните правой кнопкой мыши на классе и перейдите к:
Code Map
>Show Related Items on Code Map
>Show All Derived Types
Заметка:
PS Действительно стоит сохранить версию Enterprise (или, по крайней мере, ее предварительную версию) на вашем компьютере, так как в ней есть множество действительно полезных инструментов , которые не включены в другие версии.
источник
ActionResult
(пример ОП)Очень простой способ сделать это - выполнить поиск
: Classname
в окне «Найти и заменить» (CTRL + F) и использовать параметр «Параметры поиска / Соответствие всему слову». Вы найдете только унаследованные классы.источник
class DDerived : IInterface, BBase