Como você encontra todas as implementações de uma interface?
-
05-07-2019 - |
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.
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:
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.
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.
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:
Eu prefiro o "Navegar Para ..." opção. Com o cursor na chamada de função, tente o seguinte:
Tecla de atalho:
- Ctrl +, (Ctrl + vírgula)
Menu:
- Menu Editar
- 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.