web-dev-qa-db-fra.com

Comment trouvez-vous rapidement la ou les implémentations de la méthode d'une interface?

Existe-t-il un moyen rapide de trouver toutes les implémentations de la méthode/propriété/etc d'une interface, et non des références à celle-ci? Voici un exemple de code:

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();
  }
}

Je veux accéder rapidement à SomeClass.GetInt () lors de l'examen de SomeOtherClass.TestMethod (). Si je clique avec le bouton droit sur _someClass.GetInt () et que je clique sur "Aller à la définition", cela m'amène à l'interface. Si je clique sur "Rechercher toutes les références", je pourrais potentiellement voir une liste de toutes les utilisations ... pas seulement les classes qui implémentent la méthode GetInt ().

Existe-t-il un moyen plus rapide de trouver cela? Des conseils d'autres développeurs? Nous utilisons D.I. pour la plupart de nos dépendances, ce qui signifie que le traçage à travers du code profondément imbriqué prend pour toujours.

67
Beep beep

Comme je n'aime pas utiliser la souris lors du codage, j'ai l'habitude

  • déplacer le curseur sur la méthode
  • tapez ctrl + k clrl + t pour ouvrir la fenêtre Hiérarchie des appels
  • descendre vers le nœud Implements.
  • tapez Return pour aller à l'implémentation sélectionnée

AFAIK c'est le moyen le plus rapide pour trouver l'implémentation d'une méthode, sans ReSharper.

(Au fait: vous pouvez utiliser le même système pour passer d'une implémentation de méthode de classe à la déclaration d'interface correspondante: sélectionnez simplement la racine)

111
Arialdo Martini

Alt-End le fera dans ReSharper, je crois.

22
lance

Sans ReSharper, la meilleure façon de procéder est:

Rechercher dans les fichiers (Ctrl + Maj + F) Rechercher quoi: "classe * ISomeClass" Options de recherche: "Utiliser des caractères génériques"

Cela trouvera toutes les implémentations et vous pourrez rechercher votre fonction dans une implémentation concrète.

9
Zhenya
4
Robert Ivanc

Si votre interface se trouve dans la même bibliothèque que votre modèle concret vers laquelle vous souhaiterez généralement naviguer, vous pouvez ajouter un "à l'aide d'alias" à l'objet concret. Les "utilisations" sont de toute façon des aides, et cela aide.

using System;
using PrimaryImplementation = YourNamespace.YourConcreteObject;


public interface IYourInterface{

}

Lorsque vous êtes amené à l'interface, vous avez un moyen rapide (et sale) d'accéder à l'implémentation principale de votre interface. F12-> F12!

2
BlackjacketMack

R # a une option Aller à l'implémentation dans le menu contextuel, ce qui est vraiment pratique pour cela.

1
Brian Rasmussen