webentwicklung-frage-antwort-db.com.de

Gibt es eine Möglichkeit, zur tatsächlichen Implementierung einer Methode hinter einer Schnittstelle zu navigieren?

Wenn Sie in Visual Studio mit der rechten Maustaste auf einen Methodenaufruf klicken, wechseln Sie zur Implementierung dieser Methode innerhalb einer Klasse, es sei denn, Sie greifen über eine Schnittstelle auf diese Methode zu. In diesem Fall wechseln Sie zur Schnittstellenmethode und nicht zur tatsächlichen Implementierung.

Gibt es eine Möglichkeit/Tipps (Tastenkombination oder etwas anderes), um auf diese tatsächliche Implementierung zuzugreifen? Andernfalls müssen Sie nur einen Kommentar hinzufügen, um sich zu erinnern, wo Sie ihn implementiert haben, der wirklich nicht produktiv und fehleranfällig ist!

Update: interessante Antworten, aber ich bin nicht wirklich zufrieden, weil alle umständlich sind. Ich werde ein genaues Beispiel geben:

IInterface iInterface = someObject;                        
iInterface.someMethod();

Wenn Visual Studio nur ein bisschen schlau wäre, nur eine Zeile über dem Methodenaufruf zu suchen, würde es tatsächlich sehen, wo sich das eigentliche Objekt befindet. Und das erspart mir viele Tastenanschläge und vermeidet es, "Alle Referenzen finden" zu verwenden und dann die Zeilen mit meinen müden Augen zu scannen, um zu sehen, welche Zeile die richtige enthält :)

160
user310291

Ich mache folgendes:

1) Klicken Sie mit der rechten Maustaste auf die Methode und wählen Sie "Aufrufhierarchie anzeigen" (oder die Tastenkombination Strg + K, Strg + T).

2) Erweitern Sie den Ordner "Implements x", der Ihnen dann alle Implementierungen dieser Methode anzeigt. Klicken Sie auf eines, um dorthin zu gelangen.

Relativ schnell und einfach. Ärgerlicherweise scheint es für das Interface selbst kein Äquivalent zu geben.


pdate: Klicken Sie ab Visual Studio 2015 Update 1 mit der rechten Maustaste auf eine Methode und wählen Sie Weiter zur Implementierung. Sie können es auch über Extras> Optionen> Umgebung> Tastatur einer Tastenkombination zuordnen und nach dem Befehl Edit.GoToImplementation suchen. Die Standardverknüpfung ist Ctrl+F12. (F12 navigiert zur Oberfläche).


242

Mit VS2013 können Sie den Cursor über die Methode platzieren und Navigieren zu ... (STRG +) verwenden, um alle Stellen anzuzeigen, an denen der Name deklariert ist. Funktioniert nicht gut, wenn verschiedene Schnittstellen dieselben Methodennamen verwenden.

Mit VS2015 Update 1 gibt es jetzt eine neue Verknüpfung mit dem Namen "Go To Implementation".

46
Rolf Kristensen

Ich habe eine kostenlose Erweiterung für Visual Studio 2010 und Visual Studio 2012 mit dem Namen Inheritance Margin erstellt, um diese spezielle Funktion bereitzustellen und einen eindeutigen Hinweis darauf zu geben, wann eine Methode eine Schnittstellenmethode aufgrund einer Signaturübereinstimmung implementiert. In der aktuellen Version können Sie mit der rechten Maustaste auf ein beliebiges Symbol klicken, um ein Menü mit Elementen aufzurufen, zu denen Sie navigieren können.

Vererbungsrand - Visual Studio-Galerie

Screenshot

16
Sam Harwell

Klicken Sie mit der rechten Maustaste auf "Alle Referenzen suchen".

Dadurch wird die Codezeile für alle Stellen angezeigt, an denen die Methode verwendet wird, einschließlich der Schnittstellendeklaration und der Implementierungen der Schnittstellenmethode. Sie können dann auf die Zeile klicken, um zur Codestelle zu springen.

15
Phil Carson

Abhängig von der Version von Visual Studio, die Sie haben, sage ich bedingt "Ja".

Ich arbeite derzeit mit Ultimate und habe keine anderen Versionen, um dies zu überprüfen. Allerdings können Sie in Ultimate den Architektur-Explorer verwenden, um nach Implementierungen zu suchen. Es ist etwas komplizierter als die Rechtsklick-Methode, aber so funktioniert es.

  • Gehe zu View->Architecture Explorer (oder STRG-W, N)
  • Klicken Sie auf Klassenansicht und suchen Sie den Namespace, der Ihre Schnittstelle enthält, in der sich öffnenden Liste.
  • Rechts neben der Namespace-Liste befindet sich eine vertikale Schaltfläche mit der Aufschrift Types. Klicke hier
  • Wählen Sie Interfaces
  • Wählen Sie Ihre Schnittstelle aus der Liste
  • Eine vertikale Schaltfläche mit der Aufschrift Members wird dann rechts angezeigt. Klicken Sie auf diese Schaltfläche
  • Wählen Implemented by (unter Inbound Navigation) und das wird eine Liste von Implementierungen Ihrer Schnittstelle bereitstellen.
  • Durch einen Doppelklick auf die Implementierung gelangen Sie zur Klasse.
8
Robaticus

In 2012 Ultimate können Sie die Benutzeroberfläche im Projektmappen-Explorer durchsuchen. Klicken Sie mit der rechten Maustaste auf die Oberfläche und wählen Sie "Abgeleitete Typen". Die implementierten Klassen werden im Projektmappen-Explorer angezeigt. Nicht sicher, ob es in Express funktioniert.

6
Jack Liu Shurui

In Visual Studio 2015 Update 1 (veröffentlicht im Dezember 2015) ist jetzt standardmäßig ein Rechtsklick auf die Funktion "Zur Implementierung" enthalten.

5
PaulG

Wenn Sie Resharper verwenden und STRG + F12 drücken, gelangen Sie direkt zur Klassenmethode!

4
Maximc

Das ist nicht möglich. Was Sie beschreiben, ist nur dann sinnvoll, wenn die Schnittstelle auf eine Implementierung beschränkt ist.

Betrachten Sie dieses Beispiel:

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

Wenn Sie gehe zur Implementierung von Write in UseIWrite verwenden, gelangen Sie zur Deklaration der Schnittstelle, da zu diesem Zeitpunkt alle IWrite-Implementierungen an die Methode übergeben werden könnten.

Zum Glück bieten Ihnen einige Tools wie zum Beispiel ReSharper an, alle Verwendungen zu finden der Methode, damit Sie leicht zur gewünschten Implementierung navigieren können.

4
m0sa

Visual Studio mit Update 1 implementiert diese Funktion jetzt! Klicken Sie einfach mit der rechten Maustaste auf das Mitglied und Sie sollten "Zur Implementierung gehen" direkt unter "Zur Definition gehen" sehen.

4
Jason Steele

Testen Sie diese neue kostenlose Visual Studio 2013-Erweiterung - Implementator . Es wird die Option "Zur Implementierung wechseln" zum Kontextmenü des Visual Studio-Editors hinzugefügt.

Es ist nicht so zuverlässig und schnell wie Resharper, aber es funktioniert einwandfrei.

2
Yura

Visual Studio kann Ihnen nur mitteilen, wo darauf verwiesen wird, dies ist jedoch möglicherweise zu grob.

Es gibt andere Tools, mit denen Sie mehr über die Struktur Ihrer Anwendung erfahren können, z. B. welche Klasse welche Schnittstelle implementiert, welche Methode welche andere Methode überschreibt usw. Ich persönlich bevorzuge die Verwendung von Understand For C/C++.

1
Patrick

Wenn Sie zur Deklaration gehen, wird die Schnittstellenmethode geöffnet. Wenn Sie zur Implementierung gehen, werden Sie die Klassen anzeigen oder auflisten, die den Code für diese Schnittstellenmethode implementieren (nicht die Schnittstellenmethode selbst).

pdate

Wie Jon Skeet in den Kommentaren hervorhob (und ich habe es vor der Beantwortung versäumt), könnte die von mir beschriebene Funktion eine ReSharper-Funktion sein ... keine Visual Studio-Funktion.

1
Jamie Dixon

Nein. Dies ist nicht möglich, trotz der aufwändigen Speichercodestruktur von VS ist die Codenavigation eher ... geizig.

Es scheint, dass die einzige Alternative eine globale Suche mit "Find All Reference" gefolgt von einer manuellen Suche in der resultierenden Liste ist, um typisierte Wertdeklarationen, Konvertierungen usw. oder die Verwendung anderer Tools in VS außer dem Code-Editor auszuschließen. Alles ziemlich komplex und enttäuschend.

0
George

Du kannst es versuchen Ctrl + F12 Abkürzung. Es führt Sie zur Implementierung, so wie es Sie zu Nicht-Schnittstellen-Methoden mit F12 führt. [Ich habe es in VS 2017 ausprobiert, bin mir bei anderen Versionen nicht sicher]

0
Akbar Badhusha