No Visual Studio, quando você clica com o botão direito do mouse em uma chamada de método, você vai para a implementação desse método dentro de uma classe, exceto se você acessar esse método por meio de uma interface: nesse caso, você vai para o método da interface e não para a implementação real.
Existe uma maneira / dicas (atalho de tecla ou qualquer outra coisa) para acessar essa implementação real? Caso contrário, você estará preso para adicionar algum comentário apenas para lembrar onde você o implementou que realmente não é produtivo e propenso a erros!
Atualização: respostas interessantes, mas não estou realmente satisfeito, porque todas são complicadas. Vou dar um exemplo preciso:
IInterface iInterface = someObject;
iInterface.someMethod();
Na verdade, se o Visual Studio fosse um pouco inteligente ao olhar apenas uma linha acima da chamada do método, veria onde está o objeto real. E isso me pouparia um monte de pressionamentos de tecla e evitaria usar "encontrar todas as referências" e depois escanear as linhas com meus olhos cansados para ver qual linha continha a correta :)
fonte
Respostas:
Eu faço o seguinte:
1) Clique com o botão direito do mouse no método e clique em "Exibir hierarquia de chamadas" (ou atalho Ctrl + K, Ctrl + T)
2) Expanda a pasta "Implementos x", que mostrará todas as implementações desse método. Clique em um para ir para lá.
Relativamente rápido e fácil. Irritantemente, embora não pareça haver um equivalente para a própria interface.
update : a partir da atualização 1 do Visual Studio 2015, clique com o botão direito do mouse em um método e selecione ir para implementação. Você também pode mapeá-lo para o atalho do teclado em Ferramentas> Opções> Ambiente> Teclado e procurar o comando Edit.GoToImplementation. O atalho padrão é
Ctrl+F12
. (F12
irá navegar para a interface).fonte
Com o VS2013, é possível colocar o cursor sobre o método e usar Navegar para ... (CTRL +,), e ele exibirá todos os locais onde o nome está declarado. Não funciona bem se interfaces diferentes usam os mesmos nomes de métodos.
Com a Atualização 1 do VS2015 , agora existe um novo atalho chamado "Ir para implementação".
fonte
Edit.NavigateTo
:)Criei uma extensão gratuita para o Visual Studio 2010 e o Visual Studio 2012 chamada Margem de Herança para fornecer esse recurso específico, além de fornecer uma indicação clara quando um método implementa um método de interface devido a uma correspondência de assinatura. Na versão atual, você pode clicar com o botão direito do mouse em qualquer glifo para obter um menu de itens para o qual navegar.
Margem de herança - Galeria do Visual Studio
(fonte: microsoft.com )
fonte
Clique com o botão direito do mouse em "Localizar todas as referências".
Isso exibirá a linha de código de todos os locais onde o método é usado, incluindo a declaração da interface e as implementações do método da interface. Você pode clicar na linha para ir para o local do código.
fonte
Shift + F12
.Dependendo da versão do Visual Studio que você possui, direi condicionalmente "sim".
Atualmente, estou operando no Ultimate e não tenho outras versões para verificar isso. Dito isto, no Ultimate, você pode usar o Architecture Explorer para encontrar implementações. É um pouco mais envolvido do que o método do clique direito, mas aqui está como ele funciona.
View->Architecture Explorer
(ou CTRL-W, N)Types
. Clique aquiInterfaces
Members
aparece aparecerá à direita. Clique nesse botãoImplemented by
(abaixoInbound Navigation
) e isso fornecerá uma lista de implementações da sua interface.fonte
No 2012 Ultimate, você pode pesquisar a interface no Solution Explorer. Clique com o botão direito do mouse na interface e escolha "Tipos Derivados", as classes implementadas serão mostradas no Solution Explorer. Não tenho certeza se funciona em expresso.
fonte
O Visual Studio 2015 Update 1 (lançado em dezembro de 2015) agora adicionou um clique com o botão direito do mouse no recurso 'Ir para implementação' como padrão.
fonte
Para quem usa o Resharper, pressionar CTRL + F12 fará com que você vá diretamente para o método de classe!
fonte
Isso não é possível. O que você está descrevendo faria sentido apenas se a interface estivesse limitada a 1 implementação.
Considere este exemplo:
Se você usar a implementação de Write in UseIWrite, ela será levada à declaração da interface, porque nesse momento qualquer uma das implementações do IWrite poderia ser passada para o método.
Felizmente, algumas ferramentas, como por exemplo o ReSharper, oferecem a você todos os usos do método, para que você possa navegar facilmente até a implementação desejada.
fonte
O Visual Studio com atualização 1 agora implementa esse recurso! Basta clicar com o botão direito do mouse no membro e você verá "Ir para implementação" logo abaixo de "Ir para definição".
fonte
Confira esta nova extensão gratuita do Visual Studio 2013 - Implementator . Ele adiciona a opção "Ir para implementação" ao menu de contexto do editor do Visual Studio.
Não é tão confiável e rápido como o Resharper, mas funciona bem.
fonte
Você pode tentar o
Ctrl + F12
atalho. Isso levará você à implementação, da mesma forma que levará a métodos sem interface usando o F12. [Eu tentei no VS 2017, não tenho certeza sobre outras versões]fonte
O Visual Studio pode apenas dizer onde é referenciado, mas isso pode ser muito grosseiro.
Existem outras ferramentas que podem lhe informar mais sobre a estrutura do seu aplicativo, incluindo qual classe implementa qual interface, qual método substitui qual outro método e assim por diante. Pessoalmente, prefiro usar o Understand For C / C ++.
fonte
Ir para a declaração abrirá o método da interface. Ir para a implementação levará você ou listará para você as classes que implementam o código para esse método de interface (não o próprio método de interface).
Atualizar
Como Jon Skeet apontou nos comentários (e eu perdi antes de responder), o recurso que descrevi pode ser um recurso do ReSharper ... não do Visual Studio.
fonte
Não. Isso não é possível, apesar da elaborada estrutura de código de memória mantida pelo VS, a navegação de código é bastante ... mesquinha.
Parece que a única alternativa é uma pesquisa global com "Localizar todas as referências" seguida de uma pesquisa manual da lista resultante para excluir declarações de valor digitado, conversões etc. ou o uso de outras ferramentas no VS que não sejam o editor de código. Tudo bastante complexo e decepcionante.
fonte