c# - puede - que es una interfaz en programacion
¿Hay alguna manera de navegar hacia la implementación real del método detrás de una interfaz? (14)
¡Visual Studio con la Actualización 1 ahora implementa esta característica! Simplemente haga clic con el botón derecho en el miembro y verá "Ir a implementación" justo debajo de "Ir a definición".
En Visual Studio, cuando hace clic con el botón derecho en una llamada a 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 interfaz y no a la implementación real.
¿Hay alguna forma / consejos (acceso directo clave o algo así) para acceder a esta implementación real? De lo contrario, estás atascado para agregar algún comentario solo para recordar dónde lo implementaste, ¡que realmente no es productivo y es 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 listo para ver 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 un montón de teclas y evitaría usar "encontrar todas las referencias" y luego escanear las líneas con mis ojos cansados para ver qué línea contiene la correcta :)
Con VS2013, se puede colocar el cursor sobre el método y usar Navegar hacia ... (CTRL +,), y se mostrarán todas las ubicaciones donde se declara el nombre. No funciona bien si diferentes interfaces usan los mismos nombres de método.
Con VS2015 Update 1 ahora hay un nuevo atajo llamado "Ir a implementación".
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 para 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.
Dependiendo de la versión de Visual Studio que tenga, le diré "sí" condicionalmente.
Actualmente estoy operando en Ultimate, y no tengo otras versiones para verificar esto. Dicho esto, dentro de Ultimate, puede 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.
- Vaya a
View->Architecture Explorer
(o CTRL-W, N) - Haga clic en Class View y busque el espacio de nombres que contiene su interfaz en la lista que se abre.
- A la derecha de la lista del espacio de nombres, hay un botón vertical que dice
Types
. Haga clic en este - Seleccionar
Interfaces
- Elige tu interfaz de la lista
- Un botón vertical que dice que los
Members
aparecerán a la derecha. Haga clic en ese botón - Elija
Implemented by
(enInbound Navigation
) y que proporcionará una lista de implementaciones de su interfaz. - Hacer doble clic en la implementación lo llevará a la clase.
En 2012 Ultimate, puede buscar la interfaz en el explorador de soluciones. Haga clic con el botón derecho en la interfaz y seleccione "Tipos derivados", las clases implementadas se mostrarán en el explorador de soluciones. No estoy seguro si funciona en expreso.
Esto no es posible. Lo que describes tendrá sentido solo si la interfaz se limita a 1 implementación.
Considera este ejemplo:
interface IWrite
{
void Write();
}
class A : IWrite {
public void Write() { Console.WriteLine("A"); }
}
class B : IWrite {
public void Write() { Console.WriteLine("B"); }
}
class X : IWrite {
private readonly string _x;
public X(string x) {
_x = x;
}
public void Write() { Console.WriteLine(_x); }
}
class UseIWrite()
{
public void Use(IWrite iwrite)
{
iwrite.Write();
}
}
Si utiliza ir a la implementación de Write in UseIWrite, lo lleva a la declaración de la interfaz, porque en ese momento cualquiera de las implementaciones de IWrite podría pasarse al método.
Afortunadamente, algunas herramientas, como por ejemplo ReSharper, le ofrecen la posibilidad de encontrar todos los usos del método, para que pueda navegar fácilmente hacia la implementación deseada.
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.
Ir a la declaración abrirá el método de interfaz. Al ir a la implementación, le llevará, o le mostrará una lista, las clases que implementan el código para ese método de interfaz (no el método de interfaz en sí).
Actualizar
Como señaló Jon Skeet en los comentarios (y lo omití antes de responder), la función que describí podría ser una función ReSharper ... no una de Visual Studio.
La actualización 1 de Visual Studio 2015 (lanzada en diciembre de 2015) ahora ha agregado una función de clic derecho ''Ir a implementación'' como estándar.
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 ... mezquina.
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 tipeados, conversiones, etc. o el uso de otras herramientas dentro de VS distintas del editor de código. Todo bastante complejo y decepcionante.
Para las personas que usan Resharper, presionar CTRL + F12 te hará ir directamente al método de clase.
Vea esta nueva extensión gratuita de Visual Studio 2013 - Implementator . Agrega la opción "Ir a la implementación" al menú contextual del editor de Visual Studio.
No es tan confiable y rápido como Resharper, pero su trabajo está bien.
Visual Studio solo puede decirle dónde se hace referencia, pero esto puede ser demasiado grosero.
Hay otras herramientas que pueden brindarle más información sobre la estructura de su aplicación, incluida la clase que implementa qué interfaz, qué método invalida qué otro método, y así sucesivamente. Personalmente prefiero usar Understand For C / C ++.
Yo 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 le mostrará todas las implementaciones de ese método. Haga clic en uno para ir allí.
Relativamente rápido y fácil. Aunque parezca 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 con el botón derecho en un método y seleccione ir a implementación. También puede asignarlo al atajo de teclado a través de Herramientas> Opciones> Entorno> Teclado y buscar el comando Editar.GoToImplementación. El atajo predeterminado es Ctrl+F12
. ( F12
navegará a la interfaz).