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?
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.
Pour VS2012,
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.
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();
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.
ActionResult
ActionResult
, cliquez avec le bouton droit de la souris et sélectionnez "Symboles dérivés".À 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 .
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.
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)
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.
Avec l'aide de ReSharper (version 2016.1.2) seulement Ctrl+Alt+Click sur la classe de base. Vous verrez quelque chose comme ça:
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?
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
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.
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);
}
Pour Visual Studio 2012 ( Sans ReSharper )
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.