Pergunta

Suponha que você tenha uma interface definida em C #. Qual é o método mais fácil de encontrar todas as classes que fornecem uma implementação da interface?

O método de força bruta seria usar "Find References" no Visual Studio e manualmente olhar através dos resultados para separar os usos das implementações, mas para uma interface em uma grande base de código que é fortemente Referenciado com relativamente poucas implementações, isso pode ser demorado e propenso a erros.

Em Java, rodando javadoc sobre a base de código (usando a opção-privada para incluir aulas particulares) iria gerar uma página de documentação para a interface (por exemplo, comparável ) que inclui todas as classes de implementação para a interface, bem como quaisquer subinterfaces (embora ele não inclui as classes que implementam de as subinterfaces, estas são relativamente fáceis de determinar por perfuração para baixo nas subinterfaces listadas). É essa funcionalidade que eu estou procurando, mas com C # e Visual Studio.

Foi útil?

Solução

(Edit com base no comentário ...)

Se você tiver ReSharper instalado:

No Visual Studio, clique direito sobre o nome do tipo e escolha "Ir para o Herdeiro". Alternativamente, selecione o nome do tipo, em seguida, ir para ReSharper / View / Tipo Hierarquia para abrir uma nova guia. (O menu irá mostrar-lhe o atalho de teclado - isso pode variar, razão pela qual eu expliquei como encontrá-lo:)

Se você não tem ReSharper:

  • Você pode usar refletor , que é capaz de mostrar-lhe todo o tipo de hierarquia muito facilmente - apenas sob o nome de tipo são itens expansíveis para tipos base e tipos derivados. ferramentas similares estão disponíveis, como ILSpy e dotPeek .
  • Comprar ReSharper - é uma grande ferramenta:)

Outras dicas

Você pode clicar um nome de método (definição de interface ou implementação em outra classe) e selecione Visualizar Hierarquia de Chamadas. Na janela Hierarquia de Chamadas há "Implementos" pasta onde você pode encontrar todos os locais da implementação do método interface.

Coloque o cursor para classe ou tipo de interface e

CTRL + F12

Com o Visual Studio 2010 +

Clique direito um método membro e escolha vista chamada hierarquia. Expanda a pasta Implementos. Isto lista todos os tipos que implementam a interface do método pertence.

enter descrição da imagem aqui

Com ReSharper 7

Clique direito a interface> Navegar para> símbolos derivados. Os símbolos listados em negrito decorrem directamente da interface. símbolos não-negrito derivar de uma superclasse.

enter descrição da imagem aqui

Para aqueles usando o Visual Studio 2015, não é esta extensão incrível chamado Ir para Implementação . Experimentá-lo.

Depois de instalar a extensão, você pode simplesmente clique direito em quaisquer ocorrências da interface (por exemplo IUrlShortener) e clique no menu Go To Implementation. Se você só tem uma classe que implementa a interface, clicando no menu o levará diretamente para a classe. Se você tem mais de uma classe que implementa a interface, ele irá listar todas as classes.

Para aqueles usando o Visual Studio 2015, instalar o Visual Studio 2015 Update 1 RC. Do blogue Visual Studio :

Hoje nós lançamos Visual Studio 2015 Update 1 RC, que se baseia no Update 1 CTP nós lançamos há três semanas. Além das características introduzidas no CTP, conforme descrito aqui, o Release Candidate inclui o seguinte:

  • Go To Implementação . A característica de muitos de vocês estavam esperando:. Basta clicar com o botão direito em uma interface ou método abstrato e selecione este comando para navegar para a implementação

Eu não acho que essa funcionalidade é inerente em VS mas IIRC ReSharper tem isso.

Você poderia fazer uma pesquisa de expressão regular para a interface.

:(\ *[^},]+,)*\ *IMyInterfaceName

CTRL + SHIFT + F lançamentos a seguinte janela:

Visual Studio tela

Eu prefiro o "Navegar Para ..." opção. Com o cursor na chamada de função, tente o seguinte:

Tecla de atalho:

  1. Ctrl +, (Ctrl + vírgula)

Menu:

  1. Menu Editar
  2. Clique em "Ir para ..."

Benefícios:

  • Não mostra todas as referências como "Localizar todas as referências"
  • mostra a "Tipo" da implementação por isso vai notar que é sua interface

Use Shift + F12 para mostrar todas as referências, incluindo as definições.

Se você usar ReSharper ALT + END atalho pode ajudar a encontrar todos os herdeiros.

Eu tenho ouvido falar (sem experiência eu) que doxygen é .Net como como javadoc é java.

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