Dans Visual Studio, lorsque vous cliquez avec le bouton droit sur un appel de méthode, vous accédez à l'implémentation de cette méthode dans une classe, sauf si vous accédez à cette méthode via une interface: dans ce cas, vous accédez à la méthode d'interface et non à l'implémentation réelle.
Existe-t-il un moyen/astuce (raccourci clavier ou autre) pour accéder à cette implémentation réelle? Sinon, vous ne pouvez pas ajouter de commentaire pour vous rappeler où vous l'avez implémenté, ce qui n'est vraiment pas productif et sujet aux erreurs!
Mise à jour: réponses intéressantes mais je ne suis pas vraiment satisfait car toutes sont lourdes. Je vais donner un exemple précis:
IInterface iInterface = someObject;
iInterface.someMethod();
En fait, si Visual Studio était juste un peu intelligent pour regarder juste une ligne au-dessus de l'appel de méthode, il verrait où se trouve le véritable objet. Et cela me permettrait d'économiser beaucoup de frappes au clavier et d'éviter d'utiliser "trouver toutes les références" puis de numériser les lignes avec mes yeux fatigués pour voir quelle ligne contient la bonne. :)
Je fais ce qui suit:
1) Faites un clic droit sur la méthode et cliquez sur "Afficher la hiérarchie des appels" (ou le raccourci Ctrl + K, Ctrl + T)
2) Développez le dossier "Implements x" qui vous montrera ensuite toutes les implémentations de cette méthode. Cliquez sur l'un pour y aller.
Relativement rapide et facile. De manière contrariante, il ne semble pas y avoir d’équivalent pour l’interface elle-même.
mise à jour: à partir de Visual Studio 2015 mise à jour 1, cliquez avec le bouton droit de la souris sur une méthode et sélectionnez Aller à la mise en oeuvre. Vous pouvez également le mapper sur un raccourci clavier via Outils> Options> Environnement> Clavier et rechercher la commande Edit.GoToImplementation. Le raccourci par défaut est Ctrl+F12
. (F12
va accéder à l'interface).
Avec VS2013, vous pouvez placer le curseur sur la méthode et utiliser Naviguer vers ... (CTRL +,) pour afficher tous les emplacements où le nom est déclaré. Ne fonctionne pas bien si différentes interfaces utilisent les mêmes noms de méthodes.
Avec VS2015 Update 1 , un nouveau raccourci appelé "Aller à la mise en oeuvre" a été créé.
J'ai créé une extension gratuite pour Visual Studio 2010 et Visual Studio 2012 appelée Marge d'héritage afin de fournir cette fonctionnalité spécifique et d'indiquer clairement quand une méthode implémente une méthode d'interface en raison d'une correspondance de signature. Dans la version actuelle, vous pouvez cliquer avec le bouton droit de la souris sur n’importe quel glyphe pour afficher un menu contenant les éléments à parcourir.
Cliquez avec le bouton droit de la souris, puis sur "Trouver toutes les références".
Cela affichera la ligne de code pour tous les endroits où la méthode est utilisée, y compris la déclaration d'interface et les implémentations de la méthode d'interface. Vous pouvez ensuite cliquer sur la ligne pour accéder à l'emplacement du code.
En fonction de la version de Visual Studio que vous avez, je dirai conditionnellement "oui".
Je travaille actuellement sur Ultimate et je n'ai pas d'autres versions pour le vérifier. Cela dit, dans Ultimate, vous pouvez utiliser Architecture Explorer pour rechercher des implémentations. C'est un peu plus compliqué que la méthode du clic droit, mais voici comment cela fonctionne.
View->Architecture Explorer
(ou CTRL-W, N)Types
. Cliquez ceInterfaces
Members
apparaîtra alors à droite. Cliquez sur ce boutonImplemented by
(sous Inbound Navigation
) et qui fournira une liste des implémentations de votre interface.Dans 2012 Ultimate, vous pouvez rechercher l'interface dans la solution Explorer. Cliquez avec le bouton droit sur l'interface et choisissez "Types dérivés", les classes implémentées seront affichées dans l'explorateur de solutions. Je ne sais pas si cela fonctionne en express.
La mise à jour 1 de Visual Studio 2015 (publiée en décembre 2015) a désormais ajouté la fonctionnalité standard "Aller à la mise en œuvre".
Pour les personnes qui utilisent Resharper, appuyer sur CTRL + F12 vous fera passer directement à la méthode de classe!
Ce n'est pas possible. Ce que vous décrivez n'aurait de sens que si l'interface était limitée à 1 implémentation.
Considérons cet exemple:
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 vous utilisez allez à implémentation de Write dans UseIWrite, cela vous mènera à la déclaration de l'interface, car à ce stade, n'importe laquelle des implémentations IWrite pourrait être transmise à la méthode.
Heureusement, certains outils, comme par exemple ReSharper, vous proposent de trouver toutes les utilisations de la méthode, de sorte que vous puissiez facilement naviguer vers la mise en oeuvre souhaitée.
Visual Studio avec Update 1 implémente maintenant cette fonctionnalité! Faites un clic droit sur le membre et vous devriez voir "Aller à la mise en oeuvre" juste sous "Aller à la définition".
Découvrez cette nouvelle extension gratuite de Visual Studio 2013 - Implementator . Il ajoute l'option "Aller à la mise en œuvre" dans le menu contextuel de l'éditeur Visual Studio.
Ce n'est pas aussi fiable et rapide que Resharper, mais son travail est parfait.
Visual Studio peut uniquement vous indiquer où il est référencé, mais cela risque d'être trop grossier.
Il existe d'autres outils qui peuvent vous en dire plus sur la structure de votre application, y compris quelle classe implémente quelle interface, quelle méthode redéfinit une autre méthode, etc. Personnellement, je préfère utiliser Understand For C/C++.
Aller à la déclaration ouvrira la méthode d'interface. Aller à l'implémentation vous mènera, ou listera pour vous, les classes qui implémentent le code pour cette méthode d'interface (pas la méthode d'interface elle-même).
Mise à jour
Comme Jon Skeet l'a souligné dans les commentaires (et j'avais manqué avant de répondre), la fonctionnalité que j'ai décrite pourrait être une fonctionnalité de ReSharper ... pas une fonctionnalité de Visual Studio.
Non, ce n’est pas possible, malgré la structure de code en mémoire complexe maintenue par VS, la navigation dans le code est plutôt ... radine.
Il semble que la seule alternative possible est une recherche globale avec "Rechercher toutes les références" suivie d'une recherche manuelle dans la liste résultante pour exclure les déclarations de valeur typées, les conversions, etc. ou l'utilisation d'autres outils dans VS autres que l'éditeur de code. Tous assez complexes et décevants.
Tu peux essayer Ctrl + F12
raccourci. Cela vous mènera à l'implémentation tout comme cela vous mènera à des méthodes sans interface utilisant F12. [Je l'ai essayé dans VS 2017, pas sûr des autres versions]