Visual Studio: как показать все классы, унаследованные от базового класса?
в Visual Studio, как показать все классы, унаследованные от базового класса?
, в ASP.NET MVC есть несколько'ActionResult' типы -- и все они наследуются от / реализуют базовый класс ActionResult
.
похоже, если вы просто "знаете", что View
и Json
действует ActionResult
типы, нет никакого способа, вы можете легко найти эту информацию.
пожалуйста, докажите мне неправильный.
есть ли что-то в браузере объектов, что делает это легко узнать?
Я даже готов к предложениям инструментов за пределами Visual Studio, чтобы узнать эту информацию о различных классах. Например: есть ли что-то в Resharper, что поможет мне?
18 ответов
конечно, для ReSharper можете сделать это. И многое другое.
просто щелкните правой кнопкой мыши на имени типа в любом месте и выберите "Перейти к наследнику" в контекстном меню. "Перейти к наследнику"также можно применить к методу для перехода к переопределениям и реализациям метода интерфейса. Для интерфейса вы можете снова вызвать "Find Usages Advanced", просто щелкните правой кнопкой мыши), где найти все расширения и реализации. Для типов, производных от типа. И моя любимая особенность-нажмите с удержанием Управление любым типом / методом для перехода к его объявлению.
Я думаю, что это обязательный инструмент для разработчиков .net.
в Resharper 9.2, на любом типе в исходном коде, rt-нажмите "Найти расширенное использование", выберите Find=" производный"и область="решения и библиотеки".
Например, чтобы найти всех наследников (как в библиотеке, так и в коде) некоторого базового класса в включенной DLL от любого поставщика, объявите переменную в коде с этим базовым классом. Затем щелкните правой кнопкой мыши имя базового класса, которое вы только что ввели.
для VS2012,
- перейдите к файлу в обозревателе решений
- Раскройте и выберите свой класс
- щелкните правой кнопкой мыши элемент класса (не элемент файла) -> производные типы
вам не обязательно нужен отражатель для этого-представление "диаграмма классов" Visual Studio позволит вам легко найти все производные классы для определенного класса. Щелкните правой кнопкой мыши на классе В "Class View "и выберите"View Class Diagram". Если диаграмма не показывает уровень детализации, который вы хотите для иерархии, щелкните правой кнопкой мыши на поле для класса на диаграмме и выберите "Показать производные классы".
может быть не так прямо, как Resharper, но это вариант, если вы этого не сделаете есть R# уже.
к сожалению, я не уверен, какие именно версии Visual Studio имеют его.
Это наименее ленивый ответ (я просто горжусь такой ответ :)
У меня нет ReSharper, пробовал его раньше, но не хотел его покупать. Я попробовал диаграмму классов, но это не практично, потому что диаграмма иерархии охватывает мир 3 раза, а экран моего ноутбука не имеет бесконечной ширины. Поэтому моим естественным и простым решением было написать код Windows Forms для итерации по типам в сборке и использовать отражение для добавления узлов в древовидное представление, как следует:
пожалуйста, предположим, что у вас есть текстовое поле, вид дерева и другие вещи, необходимые в форме, в которой этот код работает
//go through all the types and add them to a tree node or add a tree node or more to them as they might be parents or children of a class. if neither 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();
никто не упоминал об этом, поэтому я добавлю его.
Jetbrains dotPeek Это бесплатный декомпилятор .NET имеет возможность легко отображать эту информацию.
скачать бесплатно:http://www.jetbrains.com/decompiler/
Jetbrains-это компания, которая делает Resharper.
шаги для поиска производных классов:
- запуск dotPeek
- выберите " Открыть из GAC...- и добавьте систему.Сеть.В MVC собрание
- выберите "навигация / перейти к типу" и введите
ActionResult
- на
ActionResult
объявление класса, щелкните правой кнопкой мыши и выберите "производные символы" - вуаля! Каждый производный класс показан (даже несколько, о которых я не знал!)
Если у вас есть для ReSharper установлен: с курсором на класс / интерфейс, щелкните правой кнопкой мыши-проверить-иерархии
Это показывает, подклассы, реализации и суперклассов.
начиная с "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/ для получения более подробной информации.
для классов Framework я использую библиотеку MSDN. Раздел иерархии наследования идет в обоих направлениях. По общему признанию, это не очень помогает для некоторых библиотек 3D-вечеринок.
вы также можете использовать отражатель.
Загрузите все сборки, которые требуется просмотреть, перейдите к типу и разверните элемент производные типы.
вы также можете сделать это в браузере объектов, но по какой-то причине VS2008 может сделать это только в одном из представлений .Net Framework. (VS2010 Beta 2 может сделать это в любом виде)
с помощью ReSharper (версия 2016.1.2) просто Ctrl+Alt+клик в базовом классе. Вы увидите что-то вроде этого:
перетащите класс или пространство имен из Обозреватель Объектов to Digram Класс.
как получить хорошую диаграмму классов для встроенных классов .net?
в представлении класса Visual Studio перейдите к интересующему вас классу и найдите его базовый и производный классы
выберите тип и щелкните правой кнопкой мыши, чтобы увидеть что -то- - - показать на карте кода-Опция выберите его сгенерировать формат изображения для тех, кто наследует этот тип как очень хорошее изображение .формат файла dgml дает гораздо больше информации о типе
просто код это.
Assembly asm = Assembly.LoadFrom(PATH_TO_PROJECT_OUTPUT);
var types = from t in asm.GetTypes()
where t.BaseType != null && t.BaseType.ToString() == "System.Web.UI.Page"
// if you want to add reference - where typeof (System.Web.UI.Page).Equals(t.BaseType)
select t;
foreach (var type in types)
{
Console.WriteLine(type);
}
Если вы обновились до VS2012, вы можете использовать "карту кода".
Щелкните правой кнопкой мыши на типе, который вы хотите просмотреть иерархию наследования, и выберите "Добавить в карту кода".
Затем в представлении карты кода Вы можете развернуть узлы и щелкнуть правой кнопкой мыши, чтобы выбрать "Показать производные / базовые классы".
К сожалению, это не работает для классов, предоставляемых .NET.
Для Visual Studio 2012 (Без ReSharper)
- в обозревателе решений щелкните правой кнопкой мыши класс (производные классы которого вы хотите увидеть).
- на диаграмме классов щелкните правой кнопкой мыши класс и выберите "Показать производные классы".
в качестве опции для тех, кто использует Visual Assist, вы также можете нажать Shift + ALT + G (в то время как курсор находится на имени класса), чтобы вызвать контекстное меню "Goto Related", и если есть производные классы, вы получите подменю для этого, которое перечисляет их все и даже показывает структуры наследования среди этих производных классов.
очень простой способ сделать это-найти : Classname
в окне "найти и заменить" (CTRL + F) и используйте опцию "Найти параметры/сопоставить все слово".
Вы найдете только унаследованные классы.