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,

  1. перейдите к файлу в обозревателе решений
  2. Раскройте и выберите свой класс
  3. щелкните правой кнопкой мыши элемент класса (не элемент файла) -> производные типы

вам не обязательно нужен отражатель для этого-представление "диаграмма классов" 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.

шаги для поиска производных классов:

  1. запуск dotPeek
  2. выберите " Открыть из GAC...- и добавьте систему.Сеть.В MVC собрание
  3. выберите "навигация / перейти к типу" и введите ActionResult
  4. на ActionResult объявление класса, щелкните правой кнопкой мыши и выберите "производные символы"
  5. вуаля! Каждый производный класс показан (даже несколько, о которых я не знал!)

Если у вас есть для 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+клик в базовом классе. Вы увидите что-то вроде этого:

see derived classes reSharper


перетащите класс или пространство имен из Обозреватель Объектов to Digram Класс.

как получить хорошую диаграмму классов для встроенных классов .net?


Try Visual Studio Class View

в представлении класса 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)

  1. в обозревателе решений щелкните правой кнопкой мыши класс (производные классы которого вы хотите увидеть).
  2. на диаграмме классов щелкните правой кнопкой мыши класс и выберите "Показать производные классы".

в качестве опции для тех, кто использует Visual Assist, вы также можете нажать Shift + ALT + G (в то время как курсор находится на имени класса), чтобы вызвать контекстное меню "Goto Related", и если есть производные классы, вы получите подменю для этого, которое перечисляет их все и даже показывает структуры наследования среди этих производных классов.


очень простой способ сделать это-найти : Classname в окне "найти и заменить" (CTRL + F) и используйте опцию "Найти параметры/сопоставить все слово". Вы найдете только унаследованные классы.