web-dev-qa-db-fra.com

Comment trouvez-vous toutes les implémentations d'une interface?

Supposons que vous ayez une interface définie en C #. Quelle est la méthode la plus simple pour trouver toutes les classes qui fournissent une implémentation de l'interface?

La méthode de force brute consisterait à utiliser "Rechercher des références" dans Visual Studio et à parcourir manuellement les résultats pour séparer les utilisations des implémentations, mais pour une interface dans une grande base de code fortement référencé avec relativement peu d'implémentations, cela peut être long et source d'erreurs.

En Java, exécuter javadoc sur la base de code (en utilisant l'option -private pour inclure des classes privées) générerait une page de documentation pour l'interface (par exemple Comparable ) qui inclut toutes les classes d'implémentation de l'interface ainsi que toutes les sous-interfaces (bien qu'il n'inclue pas d'implémentation de classes des sous-interfaces, celles-ci sont relativement faciles à déterminer en explorant les sous-interfaces répertoriées). C'est cette fonctionnalité que je recherche mais avec C # et Visual Studio.

62
iammichael

(Modifier basé sur un commentaire ...)

Si vous avez installé ReSharper:

Dans Visual Studio, cliquez avec le bouton droit sur le nom du type et choisissez "Aller à l'héritier". Sinon, sélectionnez le nom du type, puis accédez à ReSharper/View/Type Hierarchy pour ouvrir un nouvel onglet. (Le menu vous montrera le raccourci clavier - cela peut varier, c'est pourquoi j'ai expliqué comment le trouver :)

Si vous n'avez pas ReSharper:

  • Vous pouvez utiliser Reflector , qui est capable de vous montrer très facilement toute la hiérarchie des types - juste sous le nom du type se trouvent des éléments extensibles pour les types de base et les types dérivés. Des outils similaires sont disponibles tels que ILSpy et dotPeek .
  • Achetez ReSharper - c'est un excellent outil :)
33
Jon Skeet

Vous pouvez cliquer avec le bouton droit sur un nom de méthode (définition dans l'interface ou implémentation dans une autre classe) et choisir Afficher la hiérarchie des appels. Dans la fenêtre Hiérarchie des appels, il y a le dossier "Implements" où vous pouvez trouver tous les emplacements de l'implémentation de la méthode d'interface.

98
phoose

Placez le curseur sur le type de classe ou d'interface et

CTRL + F12

16
Bahtiyar Özdere

Avec Visual Studio 2010 +

Cliquez avec le bouton droit sur une méthode membre et choisissez Afficher la hiérarchie des appels. Développez le dossier Implements. Ceci répertorie tous les types qui implémentent l'interface à laquelle la méthode appartient.

enter image description here

Avec Resharper 7

Cliquez avec le bouton droit sur l'interface> Naviguer vers> Symboles dérivés. Les symboles répertoriés dans gras proviennent directement de l'interface. Les symboles non gras proviennent d'une superclasse.

enter image description here

13
P.Brian.Mackey

Pour ceux qui utilisent Visual Studio 2015, il y a cette extension géniale appelée Go To Implementation . Essaie.

Une fois que vous avez installé l'extension, vous pouvez simplement cliquer avec le bouton droit sur toutes les occurrences de l'interface (par exemple, IUrlShortener) et cliquer sur Go To Implementation menu. Si vous n'avez qu'une seule classe qui implémente l'interface, cliquer sur le menu vous amènera directement à la classe. Si vous avez plusieurs classes qui implémentent l'interface, elles répertorieront toutes les classes.

9
Nik A.

Pour ceux qui utilisent Visual Studio 2015, installez Visual Studio 2015 Update 1 RC. Depuis le blog Visual Studio :

Aujourd'hui, nous avons publié Visual Studio 2015 Update 1 RC, qui s'appuie sur la mise à jour 1 CTP que nous avons publiée il y a trois semaines. En plus des fonctionnalités introduites dans le CTP comme décrit ici, la version candidate comprend les éléments suivants:

  • Aller à l'implémentation . La fonctionnalité que beaucoup d'entre vous attendaient: faites un clic droit sur une interface ou une méthode abstraite et sélectionnez cette commande pour accéder à l'implémentation.
6
Nate Cook

Je ne pense pas que cette fonctionnalité soit intégrée dans VS mais IIRC Resharper l'a.

2

Vous pouvez faire une recherche d'expression régulière pour l'interface.

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

CTRL + MAJ + F ouvre la fenêtre suivante:

Visual Studio Screenshot

2
Kees C. Bakker

Je préfère l'option "Naviguer vers ...". Avec votre curseur sur l'appel de fonction, essayez ce qui suit:

Touche de raccourci:

  1. Ctrl +, (Ctrl + virgule)

Menu:

  1. Menu Edition
  2. Cliquez sur "Naviguer vers ..."

Avantages:

  • N'affiche pas toutes les références comme "Rechercher toutes les références"
  • Affiche le "type" de l'implémentation afin de noter quelle est votre interface
2
Tony L.

Utilisez Shift + F12 pour afficher toutes les références, y compris les définitions.

1
Akira Yamamoto

Si vous utilisez resharper ALT + END le raccourci peut aider à trouver tous les héritiers.

0
Canavar

J'ai entendu dire (pas d'expérience moi-même) que doxygen est à .Net comme javadoc à Java.

0
overslacked