Visual Studio: Comment afficher toutes les classes héritées d'une classe de base?

dans Visual Studio, Comment afficher toutes les classes héritées d'une classe de base?

for example , in ASP.NET MVC il existe plusieurs ' ActionResult ' types-et ils héritent tous de / mettre en œuvre la classe de base ActionResult .

il ressemble à moins que vous juste "savez" que View et Json sont des types valides ActionResult , il n'y a aucun moyen que vous pouvez facilement trouver cette information hors.

prouvez-moi que j'ai tort.

Est-il quelque chose dans le navigateur d'objet qui rend ce facile à trouver?

je suis même prêt pour des suggestions d'outils en dehors de Visual Studio pour découvrir cette information sur les différentes classes. Par exemple: est-il quelque chose dans Resharper qui va m'aider?

107
demandé sur Dan Esparza 2008-11-12 01:36:11

18 réponses

bien Sûr, Resharper ne peut le faire. Et bien plus encore.

cliquez avec le bouton droit de la souris sur le nom du type à n'importe quel endroit et choisissez" Go To Inheritor " dans le menu contextuel. "Go To Inheritor" peut aussi être appliqué à la méthode de navigation vers les overrides et aux implémentations d'une méthode d'interface. Pour une interface, vous pouvez appeler" Find Usages Advanced " encore une fois, juste le clic droit) où trouver toutes les extensions et les implémentations. Pour les types dérivés d'un type. Et mon préféré fonctionnalité-cliquez avec le contrôle de maintien sur n'importe quel type/méthode pour naviguer à sa déclaration.

je pense que c'est un outil indispensable pour .net développeurs.


dans Resharper 9.2, sur tout type de code source, rt-cliquez sur"Find Usage Advanced", sélectionnez Find="Derived"et Scope= " Solutions and Libraries".

Par exemple, pour trouver tous les héritiers (à la fois dans la bibliothèque et votre code) d'une classe de base dans une DLL incluse de n'importe quel vendeur, déclarez une variable dans votre code avec cette classe de base. Puis cliquez avec le bouton droit de la souris sur le nom de la classe de base que vous venez de taper.

46
répondu Shrike 2017-05-21 09:13:08

pour VS2012,

  1. Naviguer vers le fichier dans l'explorateur de solutions
  2. élargissez et sélectionnez votre classe
  3. clic droit sur l'élément de classe (pas l'élément de fichier) -> types dérivés
100
répondu countunique 2016-04-30 16:04:41

vous n'avez pas nécessairement besoin de réflecteur pour cela - le" diagramme de classe " de Visual Studio vous permettra de trouver facilement toutes les classes dérivées pour une classe particulière aussi bien. Cliquez avec le bouton droit de la souris sur la classe dans "Vue de classe" et choisissez "Voir le diagramme de classe". Si le diagramme n'indique pas le niveau de détail que vous voulez pour la hiérarchie, faites un clic droit sur la case pour la classe dans le diagramme, et choisissez "Afficher les Classes dérivées".

N'est peut-être pas aussi direct que Resharper, mais c'est une option si vous n'avez pas R# déjà.

malheureusement, je ne suis pas certain quelles versions particulières de Visual Studio l'ont.

68
répondu Michael Burr 2011-01-25 08:37:25

C'est le moins paresseux réponse (je suis juste fier de cette réponse :)

Je n'ai pas ReSharper, Je l'ai essayé avant mais je ne voulais pas l'acheter. J'ai essayé un diagramme de classe mais n'est pas pratique du tout parce que le diagramme de la hiérarchie traverse le Monde 3 fois plus et l'écran de mon ordinateur portable n'a pas la largeur infinie. Donc ma solution naturelle et facile était d'écrire du code de formes Windows pour itérer sur les types dans un assemblage et utiliser la réflexion pour ajouter noeuds à une vue d'arbre, comme suit:

veuillez supposer que vous avez une zone de texte, une vue d'arbre et d'autres choses nécessaires sur un formulaire dans lequel ce code s'exécute

//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();

12
répondu Mzn 2012-06-26 15:26:05

personne ne l'a encore mentionné, donc je vais l'ajouter.

Jetbrains dotPeek est un free.net decompiler a le pouvoir de montrer cette information facilement.

téléchargement gratuit: http://www.jetbrains.com/decompiler /

Jetbrains est la société qui fabrique Resharper.

étapes pour trouver les classes dérivées:

  1. démarrage dotPeek
  2. sélectionnez " Ouvrir à partir de GAC..."et d'ajouter" le Système de.Web.MVC assembly
  3. sélectionnez "naviguer / aller au type" et tapez ActionResult
  4. sur la déclaration de classe ActionResult , faites un clic droit et sélectionnez "symboles dérivés "
  5. voilà! Chaque classe dérivée est représentée (même quelques - unes que je ne connaissais pas!)
9
répondu Dan Esparza 2015-01-27 13:46:35

en supposant que vous avez Resharper installé: avec curseur sur la classe/interface, clic droit-inspecter-hiérarchies

indique les sous-classes, les implémentations et les superclasses.

7
répondu Tim 2013-02-11 10:43:04

à partir de" mise à jour 1 de Visual Studio 2015", il vous suffit de cliquer avec le bouton droit de la souris sur le nom d'une classe dans l'éditeur de codes de classe, puis de sélectionner "passer à la mise en œuvre" dans le menu contextuel : Ctrl + F12 étant le raccourci.

voir https://blogs.msdn.microsoft.com/dotnet/2015/11/30/whats-new-in-visual-studio-update-1-for-net-managed-languages / pour plus de détails.

6
répondu Ahmad 2017-06-16 08:36:29

pour les classes Framework, j'utilise la bibliothèque MSDN. La section sur la hiérarchie des héritages va dans les deux sens. Certes pas beaucoup d'aide pour certaines bibliothèques de partie 3d, bien que.

4
répondu Tom Juergens 2008-11-11 22:51:16

vous pouvez également utiliser réflecteur .

chargez tous les assemblages que vous voulez qu'il Regarder, naviguer vers un type, et étendre l'élément types dérivés.

vous pouvez également le faire dans le navigateur D'objet, mais pour une raison quelconque, VS2008 ne peut le faire que dans l'une des vues .net Framework. (VS2010 Bêta 2 peut le faire dans n'importe quelle vue)

4
répondu SLaks 2009-11-03 04:05:35

Avec l'aide de ReSharper (version 2016.1.2) Ctrl + Alt + , Cliquez sur sur la Classe de Base. Vous verrez quelque chose comme ceci:

see derived classes reSharper

4
répondu Devid 2016-08-09 08:47:13

Glisser de la classe ou de l'espace de de l'Explorateur d'Objets à Classe Digramme "151920920 de fichier".

Comment obtenir un bon diagramme de classe pour les classes .net intégrées?

3
répondu Iman Abidi 2017-05-23 11:55:10

Try Visual Studio Class View

dans Visual Studio Vue de classe naviguez vers la classe vous êtes intéressé et trouver sa base et les classes dérivées

3
répondu sigirisetti 2017-04-29 13:24:51

sélectionnez le type et le clic droit voir quelque chose ---afficher sur la carte de code --option Sélectionner il générer le formet d'image pour ceux qui héritent de ce type aussi image très agréable que .il donne beaucoup plus d'informations sur le type

1
répondu Magesh K 2015-01-08 08:15:38

code.

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);
}
0
répondu Mehmet Ataş 2012-08-08 15:04:42

si vous êtes passé à VS2012, vous pouvez utiliser le"Code Map".

Cliquez avec le bouton droit de la souris sur le type que vous souhaitez afficher la hiérarchie de l'héritage et choisissez "Ajouter au code map". Ensuite, dans la vue de la carte de code, vous pouvez agrandir les noeuds et cliquer avec le bouton droit de la souris pour choisir "Afficher les classes dérivées/de Base". Malheureusement, cela ne fonctionne pas pour les classes fournies par .NET.

0
répondu Andrei 2013-02-21 22:29:43

Pour Visual Studio 2012 ( Sans ReSharper )

  1. dans Solution Explorer, faites un clic droit sur la classe (dont vous voulez voir les classes dérivées).
  2. dans le diagramme de classe, faites un clic droit sur la classe et sélectionnez "Afficher les classes dérivées".
0
répondu Abhijeet Nagre 2013-09-18 12:39:42

comme option pour ceux qui utilisent Visual Assist, vous pouvez aussi appuyer sur Shift + ALT + G (alors que le signe d'insertion est sur le nom de la classe) pour faire apparaître le menu contextuel" lié au Goto", et s'il y a des classes dérivées, vous obtiendrez un sous-menu pour cela qui les liste toutes et montre même les structures d'héritage parmi ces classes dérivées.

0
répondu vdwtanner 2018-02-13 18:46:59

une façon très simple de le faire, est de rechercher : Classname dans la fenêtre" Find and Replace "(CTRL + F) et d'utiliser l'Option" Find Options/Match whole word". Vous ne trouverez que les classes héritées.

-1
répondu Richard 2015-04-30 12:14:16