2009-08-11 7 views
61

¿Existe una manera rápida de encontrar todas las implementaciones de, no referencias a, el método/propiedad/etc. de una interfaz? He aquí algunos ejemplos de código:¿Cómo se puede encontrar rápidamente la implementación (es) del método de una interfaz?

public class SomeClass : IBaseClass 
{ 
    public Int32 GetInt() 
    { 
    return 1; 
    } 
} 

public interface IBaseClass 
{ 
    public Int32 GetInt(); 
} 

public class SomeOtherClass 
{ 
    IBaseClass _someClass; 
    private TestMethod() 
    { 
    _someClass = new SomeClass(); 
    _someClass.GetInt(); 
    } 
} 

quiero llegar rápidamente a SomeClass.GetInt() al revisar SomeOtherClass.TestMethod(). Si hago clic derecho en _someClass.GetInt() y hago clic en 'Ir a definición', me lleva a la interfaz. Si hago clic en 'Buscar todas las referencias', podría ver una lista de todos los usos ... no solo las clases que implementan el método GetInt().

¿Hay una manera más rápida de encontrar esto? ¿Algún consejo de otros desarrolladores? Estamos usando D.I. para la mayoría de nuestras dependencias, lo que significa que el rastreo a través del código profundamente anidado toma para siempre.

+1

Use Shift + F12 para mostrar todas las referencias, incluidas las definiciones. –

Respuesta

21

Alt-End hará esto en ReSharper, creo.

+17

Ouch, $ 349 por desarrollador. Eso es lo que pagamos por VS2008 pro. –

+10

No pidió un discurso de ventas para ReSharper, y lo que está ganando no es de nuestra incumbencia, pero considere qué tipo de dinero está ganando haciendo lo que está haciendo, y luego considere qué tan rápido lo haría recuperar la tarifa de la licencia. Si los números son correctos, vale $ 350. Para darle una perspectiva, afirmaré que, después de 1 mes de enlentecerme lo suficiente como para aprender los pormenores de ReSharper (y, para estar seguro, todavía estoy aprendiendo algunos de ellos) mientras trabajo, la herramienta aumenta mi la productividad como autor del código en un 30% al MENOS (es probable que sea mayor, francamente, pero no quiero exagerar). – lance

+4

Estoy de acuerdo, cualquier empresa que se niegue al precio de los reafiladores (la edición única de C# es incluso más barata) es una idiota desde el momento en que se desperdicia sin costo una empresa de $ 1000. También estoy de acuerdo con la opinión de la lanza de que el costo del reafilado se recupera fácilmente en un mes. –

1

R # tiene una opción Ir a Implementación en el menú emergente, que es realmente útil para eso.

+0

Suena genial, ¿nada en VS que sepa? –

+0

No más allá de Buscar referencias que ya mencionas. Si no sabes R #, realmente te animo a que lo revises. Además de características como esta, tiene un consejo de codificación útil y un conjunto de funciones de refactorización realmente potentes. –

+0

¿No es R # un lenguaje de programación completamente diferente, o existe también un R # IDE? Estamos construyendo una aplicación ASP.NET MVC ... –

9

Sin ReSharper la mejor manera de hacer esto es:

Buscar en archivos (Ctrl + Shift + F) Encuentra Qué: "clase * ISomeClass" Encuentra Opciones: "Usar caracteres comodín"

Este encontrará toda la implementación y podrá buscar su función en una implementación concreta.

+1

Se siente raro ver ISomeClass, usualmente iniciamos interfaces con 'I' en lugar de clases ... pero así somos nosotros –

98

Dado que no me gusta usar el ratón mientras que la codificación, por lo general

  • mover el cursor sobre el método
  • tipo ctrl + k clrl + t para abrir la ventana de Jerarquía de llamadas
  • mover a Implem ents nodo.
  • Tipo de retorno para ir a la aplicación seleccionada

Aparentemente, este es el camino más rápido para encontrar la puesta en práctica de un método, sin ReSharper.

(Por cierto: se puede utilizar el mismo sistema para pasar de una aplicación método de la clase a la declaración de interfaz correspondiente: sólo tiene que seleccionar la raíz)

+0

Wow, muy bien, gracias! –

+0

Necesita VS2010 para eso, ¿verdad? – Constantin

+0

Sí, eso creo. –

1

Si la interfaz se encuentra en la misma biblioteca que su modelo concreto que Por lo general, desea navegar, puede agregar un 'alias de uso' al objeto concreto. 'Usings' son ayudantes de todos modos, y esto ayuda.

using System; 
using PrimaryImplementation = YourNamespace.YourConcreteObject; 


public interface IYourInterface{ 

} 

Cuando te llevan a la interfaz, que tienen una forma rápida (y sucio) de conseguir con la aplicación principal de su interfaz. F12-> F12!

Cuestiones relacionadas