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

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

看起来除非你只是“知道” ViewJson 有效 ActionResult 类型,您无法轻松找到此信息。

请证明我错了。

对象浏览器中是否有一些东西可以让这很容易找到?

我什至寻求 Visual Studio 之外的工具建议,以发现有关各种类的信息。例如:Resharper 中有什么可以帮助我的吗?

有帮助吗?

解决方案

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

在任何地方右键单击类型名称,然后选择“转到继承者”在上下文菜单中。 “Go To Inheritor”也可以应用于导航到覆盖的方法和接口方法的实现。对于接口,您可以调用“Find Usages Advanced”。再次,右键单击)在哪里可以找到所有扩展和实现。对于类型派生类型。 我最喜欢的功能 - 点击任意类型/方法按住Control导航到其声明。

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


在Resharper 9.2中,在源代码中的任何类型上,rt-click“Find Usage Advanced”,选择Find =" Derived"和范围=“解决方案和图书馆”。
例如,要查找来自任何供应商的包含DLL中的某些基类的所有继承者(包括库和代码),请在代码中使用该基类声明变量。然后右键单击刚刚键入的基类名称。

其他提示

对于VS2012,

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

你不一定需要Reflector - Visual Studio的“Class Diagram” view还可以让您轻松找到特定类的所有派生类。右键单击“类视图”中的类。并选择“查看类图”。如果图表未显示层次结构所需的详细程度,请右键单击图表中类的框,然后选择“显示派生类”。

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

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

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

我没有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();

从“Visual Studio 2015 Update 1”开始,您只需右键单击类代码编辑器中的类名,然后选择“转到实现”即可。从上下文菜单中:使用Ctrl + F12作为快捷方式。

参见 https://blogs.msdn.microsoft.com/dotnet/2015/11/30/whats-new-in-visual-studio-update-1-for-net-managed-languages/ 了解更多详情。

还没人提到这一点,所以我来补充一下。
Jetbrains dotPeek 是一个免费的 .NET 反编译器,能够轻松显示此信息。

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

Jetbrains 是 Resharper 的开发公司。

查找派生类的步骤:

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

假设您安装了 Resharper :右键单击 - Inspect - 层次结构

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

您也可以使用反射器

加载您想要查看的所有程序集,导航到某个类型,然后展开“派生类型”项。

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

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

对于Framework类,我使用MSDN Library。 “继承层次结构”部分指向两个方向。不过,对于某些3D派对图书馆来说,这并不是很有帮助。

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

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

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

选择类型并右键单击查看内容---在代码图上显示 - 选择它为那些继承此类型的人生成图像formet为非常好的图像为.dgml文件格式它提供了更多关于类型<的信息/ p>

只需编码即可。

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 classes”。 不幸的是,它不适用于.NET提供的类。

对于Visual Studio 2012(没有ReSharper

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

作为使用Visual Assist的用户的选项,您也可以按Shift + ALT + G(同时插入符号在类名称上)以显示“Goto Related”。上下文菜单,如果有派生类,你将得到一个子菜单,列出它们全部,甚至显示这些派生类之间的继承结构。

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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top