Pergunta

No Visual Studio, Como posso mostrar todas as classes herdadas de um classe base?

Por exemplo , em ASP.NET MVC existem vários ' ActionResult ' tipos - e todos eles herdam / implementar o ActionResult classe base.

Parece que a menos que você apenas 'saber' que View e Json são tipos ActionResult válidos, não há nenhuma maneira você pode facilmente encontrar esta informação.

Por favor, provar que estou errado.

Existe algo no navegador de objeto que torna isso fácil para descobrir?

Eu sou mesmo para sugestões de ferramentas fora do Visual Studio para descobrir esta informação sobre várias classes. Por exemplo: há algo no resharper que vai me ajudar

?
Foi útil?

Solução

Claro, ReSharper pode fazer isso. E muito mais.

Apenas clique direito no nome do tipo em qualquer lugar e escolha "Go To Inheritor" no menu de contexto. "Go To Inheritor" também pode ser aplicado a método para navegar para substituições e implementações de um método de interface. Para uma interface que você poderia chamar de "Localizar usos Avançado" novamente, apenas clique direito) onde encontrar todos os extendings e implementações. Para um tipo - derivado tipos. E o meu recurso favorito -. Clique com o segurando o controle em qualquer tipo / método para navegar para a sua declaração

Eu acho que é uma ferramenta indispensável para desenvolvedores .NET.


Em ReSharper 9.2, em qualquer tipo de código-fonte, rt-clique em "Localizar Uso Avançado", selecione Procurar = "Derivado" e scope = "Soluções e bibliotecas".
Por exemplo, para encontrar todos os herdeiros (ambos na biblioteca e seu código) de alguns classe base em uma DLL incluído de qualquer fornecedor, declarar uma variável no seu código com essa classe base. Em seguida, clique com o botão direito em que o nome da classe base que você acabou de digitar.

Outras dicas

Para VS2012,

  1. Navegue para arquivo no Solution Explorer
  2. Expandir e selecione sua classe
  3. Clique direito no item de classe (não o item de arquivo) -> Tipos Derivados

Você não precisa necessariamente refletor para isso - vista "Diagrama de Classe" Visual Studio permitirá que você facilmente encontrar todas as classes derivadas de uma classe particular também. clique direito sobre a classe em "Ver Classe" e escolha "Ver Diagrama de classe". Se o diagrama não mostra o nível de detalhe que você quer para a hierarquia, clique direito sobre a caixa para a classe no diagrama, e escolha "Mostrar classes derivadas".

Pode não ser tão direta como ReSharper, mas é uma opção se você não tem R # já.

Infelizmente, eu não sou certo que determinadas versões do Visual Studio tê-lo.

Esta é a resposta menos preguiçoso (Eu sou apenas orgulhoso de esta resposta:)

Eu não tenho ReSharper, tentou isso antes, mas não queria comprá-lo. Eu tentei um diagrama de classe, mas não é prático em tudo porque os vãos diagrama hierarquia do mundo 3 vezes e tela do meu laptop não tem largura infinita. Assim, a minha solução natural e fácil era escrever algum código Windows Forms para iterar sobre os tipos em um reflexo montagem e utilização para adicionar nós a uma exibição de árvore, como se segue:

por favor, assumir que tem uma caixa de texto, uma exibição de árvore e outras coisas necessárias em um formulário em que esse código é executado

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

A partir de 'Visual Studio 2015 Update 1' você pode simplesmente clique direito em um nome de classe no editor de código de classe e, em seguida, selecione 'Go To Implementação" no menu de contexto:. Com Ctrl + F12 sendo o atalho

Veja https://blogs.msdn.microsoft.com/dotnet/2015/11/30/whats-new-in-visual-studio-update-1-for-net-managed-languages/ para mais detalhes.

Ninguém mencionou isso ainda, então eu vou adicioná-lo.
JetBrains dotPeek é livre .NET decompiler tem o poder de mostrar esta informação facilmente.

Free download: http://www.jetbrains.com/decompiler/

A JetBrains é a empresa que faz ReSharper.

Passos para encontrar as classes derivadas:

  1. Inicie dotPeek
  2. Selecione 'Abrir a partir do GAC ...' e adicione o System.Web.Mvc montagem
  3. Selecione 'Navegar / Go para o tipo' e digite ActionResult
  4. Na declaração de classe ActionResult, clique com botão direito e selecione 'símbolos derivados'
  5. Voila! Cada classe derivada é mostrada (mesmo alguns que eu não sabia sobre!)

Supondo que você tenha ReSharper instalado: com o cursor sobre a classe / interface, clique direito - Inspecione - hierarquias

Isso mostra subclasses, implementações e superclasses.

Você também pode usar refletor .

Coloque todos os conjuntos que você quer olhar em, navegue para um tipo, e expandir o item tipos derivados.

Você também pode fazer isso no Pesquisador de objetos, mas por alguma razão VS2008 só pode fazê-lo em uma das vistas .NET Framework. (VS2010 Beta 2 pode fazê-lo em qualquer vista)

 Tente Visual Studio Ver Classe

No Visual Studio Class View navegar a classe que você está interessado e encontrar sua base e classes derivadas

Para as classes Framework, eu uso o MSDN Library. A seção Hierarquia de herança vai nos dois sentidos. É certo que não ajuda muito para algumas bibliotecas do partido 3D, no entanto.

Com a ajuda de ReSharper (versão 2016/01/02) apenas Ctrl + Alt + Clique na classe base. Você vai ver algo como isto:

 ver as classes derivadas ReSharper

classe Arraste ou namespace de Object Explorer para Class digram arquivo.

Como obter um bom diagrama de classes para classes internas do .net?

selecione o tipo e clique direito ver algo --- mostrar no mapa código --option selecioná-lo gerar o formet imagem para aqueles que herdam esse tipo como muito agradável imagem como formato de arquivo .dgml dá muito mais informação sobre o tipo

código Apenas isso.

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);
}

Se você atualizou para VS2012 você pode usar o "código do mapa".
Botão direito do mouse sobre o tipo que você deseja ver a hierarquia de herança e escolha "Adicionar ao mapa código". Em seguida, no código do mapa de visualização, você pode expandir os nós e clique direito de escolher "Mostrar derivados classes / Base". Infelizmente ele não funciona para o .NET fornecido classes.

Para Visual Studio 2012 ( Sem ReSharper )

  1. No Solution Explorer, clique direito sobre a classe (cujas aulas derivado você deseja ver).
  2. No diagrama de classe, clique direito sobre a classe e selecione 'Show classes derivadas'.

Como uma opção para aqueles que utilizam Visual Assist, você também pode pressionar Shift + ALT + G (enquanto o cursor está no nome da classe) para abrir o "Goto relacionadas" menu de contexto, e se não são derivados classes que você vai obter um submenu para isso que listas-los todos os shows fora e até mesmo de herança estruturas entre essas classes derivadas.

Uma maneira muito simples de fazer isso, é procurar : Classname no "Localizar e substituir Janela" (CTRL + F) e use a opção "Localizar Opções / Jogo palavra inteira". Você vai encontrar apenas as classes herdadas.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top