web-dev-qa-db-fra.com

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? 

Par exemple, dans ASP.NET MVC, il existe plusieurs types ' ActionResult ' - qui héritent tous de/implémentent la classe de base ActionResult

Il semble qu'à moins que vous ne "sachiez" que View et Json soient des types valides ActionResult, vous ne pouvez pas trouver facilement cette information. 

_ {Prouvez-moi si j'ai tort.} _

Y at-il quelque chose dans le navigateur d’objets qui le rend facile à découvrir?

Je suis même prêt à suggérer des outils en dehors de Visual Studio pour découvrir ces informations sur différentes classes. Par exemple: y a-t-il quelque chose dans Resharper qui peut m'aider?

117
Dan Esparza

Bien sûr, Resharper peut le faire. Et beaucoup plus.

Il suffit de cliquer avec le bouton droit de la souris sur le nom du type à n’importe quel endroit et de choisir "Aller à l’héritage" dans le menu contextuel . "Aller à l’hériteur" peut également être appliqué à la méthode permettant de naviguer vers les remplacements et les implémentations d’une méthode d’interface. Pour une interface, vous pouvez appeler "Rechercher les utilisateurs avancés" à nouveau, il suffit de cliquer avec le bouton droit de la souris) pour trouver toutes les extensions et les implémentations. Pour un type - types dérivés. Et ma fonction préférée - cliquez en maintenant Ctrl enfoncé et contrôlez le type/la méthode pour naviguer jusqu'à sa déclaration.

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


Dans Resharper 9.2, quel que soit le type de code source, cliquez sur "Trouver l'utilisation avancée", sélectionnez Trouver = "Dérivé" et Scope = "Solutions et bibliothèques".
Par exemple, pour rechercher tous les héritiers (de la bibliothèque et de votre code) d'une classe de base dans une DLL incluse, quel que soit le fournisseur, déclarez une variable dans votre code avec cette classe de base. Puis cliquez avec le bouton droit sur le nom de la classe de base que vous venez de taper.

48
Shrike

Pour VS2012, 

  1. Accédez au fichier dans l'explorateur de solutions
  2. Développez et sélectionnez votre classe
  3. Faites un clic droit sur l'élément de classe (pas l'élément de fichier) -> Types dérivés
118
countunique

Vous n'avez pas nécessairement besoin de Reflector pour cela - la vue "Diagramme de classes" de Visual Studio vous permettra également de rechercher facilement toutes les classes dérivées d'une classe particulière. Faites un clic droit sur la classe dans "Vue de classe" et choisissez "Diagramme de classe de vue" Si le diagramme n'indique pas le niveau de détail souhaité pour la hiérarchie, cliquez avec le bouton droit de la souris sur la case correspondant à la classe dans le diagramme, puis choisissez "Afficher les classes dérivées".

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

Malheureusement, je ne sais pas quelles versions de Visual Studio l’ont.

69
Michael Burr

Ceci est la réponse la moins paresseuse (je suis juste fier de cette réponse :)

Je n'ai pas ReSharper, je l'ai déjà essayé, mais je ne voulais pas l'acheter ..__ J'ai essayé un diagramme de classes, mais ce n'est pas pratique du tout, car le diagramme de hiérarchie couvre le monde 3 fois et l'écran de mon ordinateur portable ne possède pas infinity width . Ma solution naturelle et simple consistait donc à écrire du code Windows Forms pour parcourir les types d'un assemblage et à utiliser la réflexion pour ajouter des nœuds à une vue arborescente, comme suit:

supposons que vous ayez une zone de texte, une vue arborescente et d'autres éléments nécessaires sur un formulaire dans lequel ce code est exécuté

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

Personne n'en a encore parlé, alors je vais l'ajouter.
Jetbrains dotPeek est un décompilateur .NET gratuit capable d’afficher facilement ces informations.

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

Jetbrains est la société qui fabrique Resharper.

Étapes pour trouver des classes dérivées:

  1. Démarrer dotPeek
  2. Sélectionnez 'Ouvrir depuis GAC ...' et ajoutez l'assembly System.Web.MVC
  3. Sélectionnez 'Naviguer/Aller au type' et tapez ActionResult
  4. Dans la déclaration de classe ActionResult, cliquez avec le bouton droit de la souris et sélectionnez "Symboles dérivés".
  5. Voila! Chaque classe dérivée est montrée (même quelques-unes que je ne connaissais pas!)
9
Dan Esparza

À partir de "Visual Studio 2015 Update 1", vous pouvez simplement cliquer avec le bouton droit de la souris sur un nom de classe dans l'éditeur de code de classe, puis sélectionner "Aller à la mise en oeuvre" 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 . 

9
Ahmad

En supposant que vous avez Resharper installé: avec le curseur sur la classe/interface, clic droit - Inspecter - Hiérarchies

Cela montre les sous-classes, les implémentations et les superclasses.

7
Tim

Vous pouvez également utiliser Reflector .

Chargez tous les assemblys dans lesquels vous souhaitez rechercher, accédez à un type et développez l'élément Types dérivés.

Vous pouvez également le faire dans le navigateur d'objets, mais pour une raison quelconque, VS2008 ne peut le faire que dans l'une des vues .Net Framework. (VS2010 Beta 2 peut le faire dans n’importe quelle vue)

5
SLaks

Pour les classes Framework, j'utilise la bibliothèque MSDN. La section Hiérarchie d'héritage va dans les deux sens. Certes, peu d’aide pour certaines bibliothèques 3D.

4
Tom Juergens

 Try Visual Studio Class View

Dans Visual Studio Class View, accédez au cours qui vous intéresse et trouvez ses classes de base et dérivées.

4
sigirisetti

Avec l'aide de ReSharper (version 2016.1.2) seulement Ctrl+Alt+Click sur la classe de base. Vous verrez quelque chose comme ça:

see derived classes reSharper

4
Devid

Faites glisser une classe ou un espace de noms de Object Explorer vers le fichier Class Diagram.

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

3
Iman Abidi

sélectionnez le type et cliquez avec le bouton droit de la souris pour voir quelque chose --- afficher sur la carte du code --option le sélectionner générer le format d'image pour ceux qui héritent de ce type comme très belle image comme format de fichier .dgml cela donne beaucoup plus d'informations sur le type

1
Magesh K

si vous avez mis à niveau vers VS2012, vous pouvez utiliser la "Carte de code".
Faites un clic droit sur le type dont vous souhaitez afficher la hiérarchie d'héritage et choisissez "Ajouter à la mappe de code" . Ensuite, dans la vue de la carte de code, vous pouvez développer les nœuds et cliquer à droite pour choisir "Afficher les classes dérivées/de base" . Malheureusement, cela ne fonctionne pas pour les classes fournies par .NET.

0
Andrei

Il suffit de le coder.

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
Mehmet Ataş

Pour Visual Studio 2012 ( Sans ReSharper )

  1. Dans l'Explorateur de solutions, cliquez avec le bouton droit de la souris sur la classe (dont vous souhaitez voir les classes dérivées). 
  2. Dans le diagramme de classes, cliquez avec le bouton droit de la souris sur la classe et sélectionnez "Afficher les classes dérivées".
0
Abhijeet Nagre

En option pour ceux qui utilisent Visual Assist, vous pouvez également appuyer sur Maj + ALT + G (lorsque le curseur est placé sur le nom de la classe) pour afficher le menu contextuel "Aller à", et s'il existe des classes dérivées, un sous-menu apparaît pour cela, cela les liste tous et montre même des structures d'héritage parmi ces classes dérivées.

0
vdwtanner