¿Cómo se encuentran todas las implementaciones de una interfaz?

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 usar “Buscar referencias” en Visual Studio y examinar manualmente los resultados para separar los usos de las implementaciones, pero para una interfaz en una gran base de código que está muy referenciada con relativamente pocas implementaciones, esto puede ser lento y propenso a errores.

En Java, la ejecución de javadoc en la base de código (usando 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 incluyen la implementación de clases de las subinterfaces, estas son relativamente fáciles de determinar al profundizar en las subinterfaces enumeradas). Es esta funcionalidad que estoy buscando pero con C # y Visual Studio.

(Edición basada en comentarios …)

Si tiene ReSharper instalado:

En Visual Studio, haga clic con el botón derecho en el nombre del tipo y elija “Ir a Inheritor”. Alternativamente, seleccione el nombre del tipo, luego vaya a ReSharper / View / Type Hierarchy para abrir una nueva pestaña. (El menú te mostrará el atajo de teclado; esto puede variar, por lo que expliqué cómo encontrarlo 🙂

Si no tiene ReSharper:

  • Puede usar Reflector , que puede mostrarle toda la jerarquía de tipos muy fácilmente: justo debajo del nombre de tipo hay elementos expandibles para los tipos de base y los tipos derivados. Herramientas similares están disponibles como ILSpy y dotPeek .
  • Compre ReSharper – es una gran herramienta 🙂

Puede hacer clic con el botón 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 Call Hierarchy hay una carpeta “Implements” donde puede encontrar todas las ubicaciones de la implementación del método de interfaz.

Con Visual Studio 2010+

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

enter image description here

Con Resharper 7

Haga clic con el botón derecho en la interfaz> Navegar hasta> Símbolos derivados. Los símbolos enumerados en negrita derivan directamente de la interfaz. Los símbolos no audaces derivan de una superclase.

enter image description here

Para aquellos que usan Visual Studio 2015, existe esta increíble extensión llamada Go To Implementation . Darle una oportunidad.

Una vez que haya instalado la extensión, puede hacer clic con el botón derecho en cualquier aparición de la interfaz (por ejemplo, IUrlShortener) y hacer clic en Go To Implementation menú Go To Implementation . 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.

Coloque el cursor en clase o tipo de interfaz y

CTRL + F12

Para aquellos que usan Visual Studio 2015, instalen 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 Release Candidate incluye lo siguiente:

  • Ir a implementación . La característica que muchos de ustedes han estado esperando: simplemente haga clic 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ía hacer una búsqueda de expresiones regulares para la interfaz.

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

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

Captura de pantalla de Visual Studio

Prefiero la opción “Navegar a …”. Con el cursor sobre la llamada a la función, intente lo siguiente:

Tecla de acceso directo:

  1. Ctrl +, (Ctrl + coma)

Menú:

  1. Menú de edición
  2. Haga clic en “Navegar hacia …”

Beneficios:

  • No muestra todas las referencias como “Buscar todas las referencias”
  • Muestra el “tipo” de la implementación para que note cuál es su interfaz

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

Si usa el acceso directo ALT + END de reactivación, puede ayudar a encontrar todos los herederos.

He oído decir (sin experiencia) que Doxygen es para .Net, ya que javadoc es para Java.