Visual Studio:如何显示从基类inheritance的所有类?

在Visual Studio中,如何显示从基类inheritance的所有类?

例如 ,在ASP.NET MVC中有几个“ ActionResult ”types – 它们都从基类ActionResultinheritance/实现。

它看起来像,除非你知道ViewJson是有效的ActionResulttypes,否则你无法轻易find这些信息。

请certificate我错了。

在对象浏览器中有什么东西可以很容易find?

我甚至提出了Visual Studio以外的工具的build议,以发现有关各种类的信息。 例如:Resharper中有什么能帮助我吗?

当然, Resharper可以做到这一点。 以及更多。

只需在任何地方右键单击types名称,然后在上下文菜单中select“转到inheritance者”。 “转到inheritance者”也可以应用于导航到覆盖的方法和接口方法的实现。 对于一个界面,您可以再次调用“查找使用高级”,只需点击右键)查找所有扩展和实现的位置。 对于一个types派生types。 而我最喜欢的function – 点击与控制任何types/方法导航到其声明。

我认为这是.net开发人员必备的工具。


在Resharper 9.2中,在任何types的源代码中,rt单击“查找使用高级”,select查找=“派生”和范围=“解决scheme和库”。
例如,要查找任何供应商包含的DLL中某个基类的所有inheritance者(包括库和代码中的),请在您的代码中使用该基类声明一个variables。 然后右键单击刚input的基类名称。

对于VS2012,

  1. 在解决scheme资源pipe理器中导航到文件
  2. 展开并select你的class级
  3. 右键点击类项目(不是文件项目) – >派生types

您不一定需要这样的reflection器 – Visual Studio的“类图”视图可以让您轻松find特定类的所有派生类。 在“类视图”中右键单击该类,然后select“查看类图”。 如果图表没有显示层次结构所需的细节级别,请右键单击图表中类的框,然后select“显示派生类”。

可能不像Resharper那样直接,但是如果你还没有R#,这是一个选项。

不幸的是,我不确定哪些版本的Visual Studio具有它。

这是最懒惰的答案(我只是为这个答案感到自豪:)

我没有ReSharper,之前试过但不想买。 我尝试了一个类图,但根本不实用,因为层次结构图跨越了世界的三倍,而我的笔记本电脑的屏幕没有无限的宽度。 所以我自然而简单的解决scheme是编写一些Windows窗体代码来遍历程序集中的types,并使用reflection将节点添加到树视图中,如下所示:

请假设你有一个文本框,树视图和其他代码运行的窗体上需要的东西

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

假设你已经安装了Resharper :在类/接口上用鼠标右键点击 – Inspect – Hierarchies

这显示了子类,实现和超类。

没有人提到过,所以我会添加它。
Jetbrains dotPeek是一个免费的.NET反编译器,可以轻松显示这些信息。

免费下载: http : //www.jetbrains.com/decompiler/

Jetbrains是制造Resharper的公司。

find派生类的步骤:

  1. 启动dotPeek
  2. select“从GAC打开…”并添加System.Web.MVC程序集
  3. select“导航/转到input”并inputActionResult
  4. ActionResult类声明上,右键单击并select“派生符号”
  5. 瞧! 显示每一个派生类(甚至有一些我不知道的!)

对于框架类,我使用MSDN库。 inheritance层次结构部分是双向的。 不过,对于一些3D派对来说,这并不是很有帮助。

你也可以使用reflection器 。

加载你想要的所有程序集,导航到一个types,并展开Derived Types项。

您也可以在对象浏览器中执行此操作,但由于某些原因,VS2008只能在.Net Framework视图之一中执行此操作。 (VS2010 Beta 2可以在任何视图中执行此操作)

将类或名称空间从对象资源pipe理器 拖到类Digram文件。

如何获得内置.net类的好的类图?

在ReSharper (版本2016.1.2)的帮助下,只需按Ctrl + Alt + 单击基本类。 你会看到这样的东西:

请参阅派生类reSharper

从“Visual Studio 2015 Update 1”开始,您只需在类代码编辑器中右键单击类名称,然后从上下文菜单中select“转到实施”:以Ctrl + F12为快捷键。

有关更多详细信息,请参阅https://blogs.msdn.microsoft.com/dotnet/2015/11/30/whats-new-in-visual-studio-update-1-for-net-managed-languages/

selecttypes和右键单击看到的东西—在代码映射上显示 – select它为那些inheritance这种types的图像formet生成为非常漂亮的图像作为.dgml文件格式它提供了更多关于types的信息

尝试Visual Studio类视图

在Visual Studio类视图中导航到您感兴趣的类并find其基类和派生类

只是编码。

 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,你可以使用“代码地图”。
右键点击您想要查看inheritance层次的types,然后select“添加到代码映射”。 然后在代码映射视图中,可以展开节点并右键单击以select“显示派生/基类”。 不幸的是,它不适用于.NET提供的类。

对于Visual Studio 2012( 无需ReSharper

  1. 在解决scheme资源pipe理器中,右键单击该类(您想要查看的派生类)。
  2. 在类图中,右键单击类并select“显示派生类”。

一个非常简单的方法是在“查找和replace窗口”(CTRL + F)中search: Classname并使用“查找选项/匹配整个单词”选项。 你会发现只有inheritance的类。