En Visual Studio, cuando hace clic con el botón derecho en una llamada a un método, va a la implementación de ese método dentro de una clase, excepto si accede a este método a través de una interfaz: en ese caso, va al método de la interfaz, no a la implementación real.
¿Hay alguna forma / consejos (atajo de teclado o algo) para acceder a esta implementación real? De lo contrario, está obligado a agregar algún comentario solo para recordar dónde lo implementó, lo que realmente no es productivo y propenso a errores.
Actualización: respuestas interesantes pero no estoy realmente satisfecho porque todos son engorrosos. Daré un ejemplo preciso:
IInterface iInterface = someObject;
iInterface.someMethod();
En realidad, si Visual Studio fuera un poco inteligente para mirar solo una línea por encima de la llamada al método, vería dónde está el objeto real. Y eso me ahorraría muchas pulsaciones de teclas y evitaría usar "buscar todas las referencias" y luego escanear las líneas con mis ojos cansados para ver qué línea contiene la correcta :)
fuente
Respuestas:
Hago lo siguiente:
1) Haga clic derecho en el método y haga clic en "Ver jerarquía de llamadas" (o acceso directo Ctrl + K, Ctrl + T)
2) Expanda la carpeta "Implements x" que luego le mostrará todas las implementaciones de ese método. Haga clic en uno para ir allí.
Relativamente rápido y fácil. Aunque sea molesto, no parece haber un equivalente para la interfaz en sí.
actualización : a partir de la actualización 1 de Visual Studio 2015, haga clic derecho en un método y seleccione ir a implementación. También puede asignarlo al método abreviado de teclado mediante Herramientas> Opciones> Entorno> Teclado y buscar el comando Editar. Ir a Implementación. El acceso directo predeterminado es
Ctrl+F12
. (F12
navegará a la interfaz).fuente
Con VS2013, se puede colocar el cursor sobre el método y usar Navegar hacia ... (CTRL +,), y mostrará todas las ubicaciones donde se declara el nombre. No funciona bien si diferentes interfaces usan los mismos nombres de métodos.
Con VS2015 Update 1 ahora hay un nuevo acceso directo llamado "Ir a la implementación".
fuente
Edit.NavigateTo
:)Creé una extensión gratuita para Visual Studio 2010 y Visual Studio 2012 llamada Margen de herencia para proporcionar esta característica específica, así como dar una indicación clara cuando un método implementa un método de interfaz debido a una coincidencia de firma. En la versión actual, puede hacer clic derecho en cualquier glifo para obtener un menú de elementos para navegar.
Margen de herencia - Visual Studio Gallery
(fuente: microsoft.com )
fuente
Haga clic derecho y luego "Buscar todas las referencias".
Esto mostrará la línea de código para todos los lugares donde se usa el método, incluida la declaración de interfaz y las implementaciones del método de interfaz. Luego puede hacer clic en la línea para saltar a la ubicación del código.
fuente
Shift + F12
.Dependiendo de la versión de Visual Studio que tenga, diré condicionalmente "sí".
Actualmente estoy operando en Ultimate, y no tengo otras versiones para verificar esto. Dicho esto, dentro de Ultimate, puedes usar el Explorador de Arquitectura para encontrar implementaciones. Es un poco más complicado que el método de clic derecho, pero así es como funciona.
View->Architecture Explorer
(o CTRL-W, N)Types
. Haga clic aquíInterfaces
Members
aparecerá a la derecha. Haga clic en ese botónImplemented by
(debajoInbound Navigation
) y eso proporcionará una lista de implementaciones de su interfaz.fuente
En 2012 Ultimate, puede buscar la interfaz en el explorador de soluciones. Haga clic derecho en la interfaz y elija "Tipos derivados", las clases implementadas se mostrarán en el explorador de soluciones. No estoy seguro si funciona en expreso.
fuente
La actualización 1 de Visual Studio 2015 (lanzada en diciembre de 2015) ahora ha agregado un clic derecho en la función 'Ir a implementación' como estándar.
fuente
¡Para las personas que usan Resharper, presionar CTRL + F12 les hará ir directamente al método de clase!
fuente
Esto no es posible. Lo que está describiendo tendría sentido solo si la interfaz se limitara a 1 implementación.
Considere este ejemplo:
Si usa vaya a implementación de Write in UseIWrite, lo lleva a la declaración de la interfaz, porque en ese punto cualquiera de las implementaciones de IWrite podría pasar al método.
Afortunadamente, algunas herramientas como, por ejemplo, ReSharper, le ofrecen encontrar todos los usos del método, para que pueda navegar fácilmente a la implementación deseada.
fuente
¡Visual Studio con la Actualización 1 ahora implementa esta característica! Simplemente haga clic derecho en el miembro y debería ver "Ir a implementación" justo debajo de "Ir a definición".
fuente
Echa un vistazo a esta nueva extensión gratuita de Visual Studio 2013: implementador . Agrega la opción "Ir a implementación" al menú contextual del editor de Visual Studio.
No es tan confiable y rápido como Resharper, pero funciona bien.
fuente
Puedes probar el
Ctrl + F12
atajo. Le llevará a la implementación al igual que lo llevará a métodos que no sean de interfaz usando F12. [Lo probé en VS 2017, no estoy seguro acerca de otras versiones]fuente
Visual Studio solo puede decirle a dónde se hace referencia, pero esto puede ser demasiado burdo.
Existen otras herramientas que pueden brindarle más información sobre la estructura de su aplicación, incluida qué clase implementa qué interfaz, qué método anula qué otro método, etc. Personalmente prefiero usar Understand For C / C ++.
fuente
Ir a la declaración abrirá el método de interfaz. Al ir a la implementación, lo llevará o enumerará las clases que implementan el código para ese método de interfaz (no el método de interfaz en sí).
Actualizar
Como Jon Skeet señaló en los comentarios (y me perdí antes de responder), la característica que describí podría ser una característica de ReSharper ... no una de Visual Studio.
fuente
No. Esto no es posible, a pesar de la elaborada estructura de código de memoria mantenida por VS, la navegación de código es bastante ... tacaña.
Parece que la única alternativa es una búsqueda global con "Buscar todas las referencias", seguida de una búsqueda manual de la lista resultante para excluir declaraciones de valores escritos, conversiones, etc. o el uso de otras herramientas dentro de VS que no sean el editor de código. Todo bastante complejo y decepcionante.
fuente