Pregunta

Supongamos que tiene una interfaz definida en C #. ¿Cuál es el método más fácil para encontrar todas las clases que proporcionan una implementación de la interfaz?

El método de fuerza bruta sería utilizar " Buscar referencias " en Visual Studio y revise manualmente los resultados para separar los usos de las implementaciones, pero para una interfaz en una base de código grande que está muy referenciada con relativamente pocas implementaciones, esto puede llevar mucho tiempo y ser propenso a errores .

En Java, ejecutar javadoc en el código base (utilizando la opción -private para incluir clases privadas) generaría una página de documentación para la interfaz (por ejemplo, Comparable ) que incluye todas las clases de implementación para la interfaz así como cualquier subinterfaz (aunque no incluye clases de implementación de las subinterfaces, estas son relativamente fáciles de determinar al profundizar en las subinterfaces enumeradas). Lo que busco es esta funcionalidad, pero con C # y Visual Studio.

¿Fue útil?

Solución

(Edición basada en comentario ...)

Si tienes instalado ReSharper:

En Visual Studio, haga clic con el botón derecho en el nombre del tipo y seleccione " Ir a heredero " ;. Alternativamente, seleccione el nombre del tipo, luego vaya a ReSharper / View / Type Hierarchy para abrir una nueva pestaña. (El menú le mostrará el método abreviado de teclado; esto puede variar, por lo que expliqué cómo encontrarlo :)

Si no tienes ReSharper:

  • Puede usar Reflector , que puede mostrarle toda la jerarquía de tipos. fácilmente - justo debajo del nombre de tipo son elementos expandibles para tipos base y tipos derivados. Hay herramientas similares disponibles, como ILSpy y dotPeek .
  • Compre ReSharper: es una gran herramienta :)

Otros consejos

Puede hacer clic derecho en el nombre de un método (definición en la interfaz o implementación en otra clase) y elegir Ver jerarquía de llamadas. En la ventana Jerarquía de llamadas hay " Implementos " carpeta donde puede encontrar todas las ubicaciones de la implementación del método de interfaz.

Ponga el cursor en clase o tipo de interfaz y

CTRL + F12

Con Visual Studio 2010+

Haga clic con el botón derecho en un método miembro y elija ver jerarquía de llamadas. Expanda la carpeta Implementos. Esto lista todos los tipos que implementan la interfaz a la que pertenece el método.

ingrese la descripción de la imagen aquí

Con Resharper 7

Haz clic derecho en la interfaz > Navegar a > Símbolos derivados. Los símbolos listados en negrita se derivan directamente de la interfaz. Los símbolos que no están en negrita se derivan de una superclase.

ingrese la descripción de la imagen aquí

Para aquellos que usan Visual Studio 2015, existe esta increíble extensión llamada Ir a Implementación . Pruébalo.

Una vez que haya instalado la extensión, puede hacer clic derecho en cualquier instancia de la interfaz (por ejemplo, IUrlShortener) y hacer clic en el menú Ir a la implementación . Si solo tiene una clase que implementa la interfaz, hacer clic en el menú lo llevará directamente a la clase. Si tiene más de una clase que implementa la interfaz, listará todas las clases.

Para aquellos que usan Visual Studio 2015, instale Visual Studio 2015 Update 1 RC. Desde el blog de Visual Studio :

  

Hoy lanzamos Visual Studio 2015 Update 1 RC, que se basa en la actualización 1 CTP que lanzamos hace tres semanas. Además de las características introducidas en el CTP como se describe aquí, el candidato de lanzamiento incluye lo siguiente:

     
      
  • Ir a la implementación . La característica que muchos de ustedes han estado esperando: simplemente haga clic con el botón derecho en una interfaz o método abstracto y seleccione este comando para navegar a la implementación.
  •   

No creo que esta funcionalidad esté incorporada en VS, pero IIRC Resharper tiene esto.

Podrías hacer una búsqueda de expresiones regulares para la interfaz.

:(\ *[^},]+,)*\ *IMyInterfaceName

CTRL + MAYÚS + F abre la siguiente ventana:

Captura de pantalla de Visual Studio

Prefiero el " Navegar a ... " opción. Con el cursor en la llamada de función, intente lo siguiente:

Tecla de acceso directo:

  1. Ctrl +, (Ctrl + coma)

Menú:

  1. Menú de edición
  2. Haz clic en " Navegar hacia ... "

Beneficios:

  • No muestra todas las referencias como " Buscar todas las referencias "
  • muestra el " tipo " de la implementación por lo que se dará cuenta de cuál es su interfaz

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

Si usa el acceso directo resharper ALT + END puede ayudar a encontrar a todos los herederos.

He oído decir (no tengo experiencia) que doxygen es .Net como javadoc es java.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top