VisualStudio: 如何显示从基类继承的所有类?

在 VisualStudio 中,如何显示从基类继承的所有类?

例如 ,在 ASP.NET MVC 中有几个‘ 行动结果’类型——它们都继承自/实现基类 ActionResult

看起来,除非你“知道”ViewJson是有效的 ActionResult类型,否则你不可能轻易找到这些信息。

请证明我是错的。

在对象浏览器中是否有什么东西可以使得这一点很容易找到?

我甚至希望获得 VisualStudio 之外的工具的建议,以发现关于各种类的这些信息。例如: 在 Resharper 有什么东西可以帮助我吗?

96748 次浏览

当然,清醒一下可以做到这一点。还有更多。

只需在任何位置右键单击类型名称,然后在上下文菜单中选择“转到继承者”。 “转到继承者”也可以应用于导航到重写的方法和接口方法的实现。对于一个接口,您可以再次调用“ Find Usages Advanced”,只需右键单击)查找所有扩展和实现的位置。类型派生类型的。 还有我最喜欢的特性——在任何类型/方法上单击“控制”,导航到它的声明。

我认为它是.net 开发者必备的工具。


在 Resharper 9.2中,对于源代码中的任何类型,右键单击“ Find Use Advanced”,选择 Find = “ Derived”和 Scope = “ Solutions and Library”。
例如,若要在任何供应商提供的包含 DLL 中查找某个基类的所有继承者(包括库和代码中的继承者) ,请使用该基类在代码中声明一个变量。然后右键单击刚刚键入的基类名称。

对于 Framework 类,我使用 MSDN 库。继承层次结构部分是双向的。不过,诚然,对于一些3D 聚会图书馆来说,帮助不大。

也可以使用 反光镜

加载希望它查看的所有程序集,导航到类型,并展开“派生类型”项。

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

您不一定需要反射器-VisualStudio 的“类图”视图将让您轻松地找到特定类的所有派生类。右键单击“类视图”中的类,然后选择“查看类关系图”。如果关系图没有显示您想要的层次结构的详细级别,右键单击关系图中类的框,然后选择“显示派生类”。

可能没有 ReSharper 那么直接,但是如果您还没有 R # ,那么它是一个选项。

不幸的是,我不确定 VisualStudio 的哪个特定版本拥有它。

将类或命名空间从 对象资源管理器拖动到 班级图表文件。

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

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

我没有 ReSharper,以前试过,但不想买。 我尝试了一个类图,但是一点也不实用,因为层次结构图跨越了3个世界,而且我的笔记本电脑屏幕没有无限宽度。 因此,我自然而简单的解决方案是编写一些 Windows 窗体代码来迭代程序集中的类型,并使用反射向树视图添加节点,如下所示:

请假设您在运行此代码的表单上有一个文本框、一个树视图和其他需要的东西

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

还没有人提到过这个,所以我要补充一下。
Jetbrain dotPeek 是一个免费的. NET 反编译器,可以轻松地显示这些信息。

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

Jetbrain 是制造 Resharper 的公司。

查找派生类的步骤:

  1. 启动 dotPeek
  2. 选择“ Open from GAC...”并添加 System.Web.MVC 程序集
  3. 选择‘ Navigate/Go to type’并输入 ActionResult
  4. ActionResult类声明上,右键单击并选择“派生符号”
  5. 瞧! 每个派生类都显示出来了(甚至有几个我不知道!)

编码就行了。

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,你可以使用“代码地图”。
右键单击您希望查看的继承层次结构的类型,并选择“添加到代码映射”。 然后在代码映射视图中,您可以展开节点并右键单击以选择“ Show Derived/Base class”。 不幸的是,它不适用于.NET 提供的类。

对于 VS2012,

  1. 导航到解决方案资源管理器中的文件
  2. 展开并选择您的类
  3. 右键单击类项(不是文件项)-> 派生类型

VisualStudio2012(没有 ReSharper)

  1. 在“解决方案资源管理器”中,右键单击要查看其派生类的类。
  2. 在类图中,右键单击类并选择“显示派生类”。

选择类型并右键单击 see something ——-show on code map ——选项选择它为那些继承了这种类型的人生成图像格式。Dgml 文件格式,它提供了更多关于类型的信息

一个非常简单的方法是在“查找和替换窗口”(CTRL + F)中搜索 : Classname,然后使用“查找选项/匹配整个单词”选项。 只能找到继承的类。

锐利者(版本2016.1.2)的帮助下,基类上只有 Ctrl + Alt + Click:

see derived classes reSharper

Try Visual Studio Class View

在 VisualStudio 类视图中,导航到感兴趣的类,并找到其基类和派生类。

从“ Visual Studio 2015 Update 1”开始,你可以在类代码编辑器中右键单击一个类名,然后从上下文菜单中选择“ Go To 實现”: 使用 Ctrl + F12作为快捷方式。

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

对于那些使用 Visual Assist 的用户来说,你也可以按 Shift + ALT + G (当插入符号在类名上时)来打开“与 Goto 相关”的上下文菜单,如果有派生类,你会得到一个子菜单,它会列出所有派生类,甚至显示这些派生类之间的继承结构。

2020年更新:

你可以使用 Visual Studio 的 密码地图,它工作得很好。

只需右键单击类并导航到:
Code Map > Show Related Items on Code Map > Show All Derived Types

enter image description here

注:

  • 此特性可在 Visual Studio 的企业版中使用 只有,如果您使用 没有, 你可以通过从 这里下载企业预览版来获得 免费的
  • 或者,您可能会要求团队中的任何人共享具有 这个特性的代码映射,如果他们有该版本的话。

附言。在您的计算机中保留企业版(或者至少是预览版)是非常有价值的,因为它有一大堆其他版本中没有包含的 非常有用的工具