web-dev-qa-db-ja.com

インターフェイスの背後にあるメソッドの実際の実装にナビゲートする方法はありますか?

Visual Studioでは、メソッド呼び出しを右クリックすると、インターフェイスを介してこのメ​​ソッドにアクセスする場合を除き、クラス内のそのメソッドの実装に移動します。その場合、実際の実装ではなくインターフェイスメソッドに移動します。

この実際の実装にアクセスする方法/ヒント(キーのショートカットなど)はありますか?そうしないと、実際に生産的ではなく、エラーが発生しやすいコメントを追加する必要があります。

更新:興味深い答えですが、すべてが面倒なので、私は本当に満足していません。正確な例を示します。

IInterface iInterface = someObject;                        
iInterface.someMethod();

実際、Visual Studioがメソッド呼び出しの上の1行だけを見るのが少し賢い場合、実際のオブジェクトがどこにあるかがわかります。そして、それは私に多くのキーストロークを節約し、「すべての参照を見つける」を使用することを避け、疲れた目で行をスキャンして、正しい行が含まれている行を確認します:)

160
user310291

私は次のことをします:

1)メソッドを右クリックし、[呼び出し階層を表示]をクリックします(またはショートカットCtrl + K、Ctrl + T)

2)「Implements x」フォルダーを展開すると、そのメソッドのすべての実装が表示されます。そこをクリックしてください。

比較的迅速かつ簡単。面倒なことに、インターフェイス自体に相当するものはないようです。


更新:Visual Studio 2015 update 1の時点で、メソッドを右クリックして[実装に移動]を選択します。 [ツール]> [オプション]> [環境]> [キーボード]を使用してキーボードショートカットにマップし、Edit.GoToImplementationコマンドを検索することもできます。デフォルトのショートカットはCtrl+F12です。 (F12はインターフェースにナビゲートします)。


242

VS2013では、メソッドの上にカーソルを置いて、ナビゲート先...(CTRL +、)を使用すると、名前が宣言されているすべての場所が表示されます。異なるインターフェイスが同じメソッド名を使用している場合、うまく機能しません。

VS2015 Update 1 では、「実装に移動」という新しいショートカットが追加されました。

46
Rolf Kristensen

継承マージンと呼ばれるVisual Studio 2010およびVisual Studio 2012の無料の拡張機能を作成して、この特定の機能を提供するとともに、メソッドがシグネチャの一致によりインターフェイスメソッドを実装する場合に明確な指示を与えるようにしました。現在のバージョンでは、グリフを右クリックして、移動するアイテムのメニューを取得できます。

継承マージン-Visual Studio Gallery

Screenshot

16
Sam Harwell

右クリックして、「すべての参照を検索」。

これにより、インターフェイス宣言やインターフェイスメソッドの実装など、メソッドが使用されるすべての場所のコード行が表示されます。その後、行をクリックしてコードの場所にジャンプできます。

15
Phil Carson

使用しているVisual Studioのバージョンに応じて、条件付きで「はい」と言います。

現在、Ultimateを使用していますが、これを確認する他のバージョンはありません。とは言っても、Ultimate内では、Architecture Explorerを使用して実装を見つけることができます。右クリックの方法よりも少し複雑ですが、それがどのように機能するかを示します。

  • View->Architecture Explorer(またはCTRL-W、N)に移動します
  • [クラスビュー]をクリックし、表示されるリストでインターフェースを含むネームスペースを見つけます。
  • 名前空間リストの右側には、Typesと表示される垂直ボタンがあります。これをクリック
  • Interfacesを選択します
  • リストからインターフェイスを選択します
  • Membersという垂直ボタンが右側に表示されます。そのボタンをクリック
  • Implemented byInbound Navigationの下)を選択すると、インターフェースの実装のリストが表示されます。
  • 実装をダブルクリックすると、クラスが表示されます。
8
Robaticus

2012 Ultimate内では、ソリューションエクスプローラーでインターフェイスを検索できます。インターフェイスを右クリックして[派生型]を選択すると、実装されたクラスがソリューションエクスプローラーに表示されます。エクスプレスで動作するかどうかはわかりません。

6
Jack Liu Shurui

Visual Studio 2015 Update 1(2015年12月にリリース)では、右クリックの[実装に移動]機能が標準で追加されました。

5
PaulG

Resharperを使用するユーザーの場合、CTRL + F12を押すと、クラスメソッドに直接移動できます。

4
Maximc

これは不可能です。説明していることは、インターフェースが1つの実装に制限される場合にのみ意味があります。

この例を考えてみましょう:

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

UseIWriteでWriteの実装に進むを使用すると、インターフェイスの宣言に移動します。その時点で、IWrite実装のいずれかがメソッドに渡される可能性があるためです。

ありがたいことに、ReSharperなどのいくつかのツールは、メソッドのすべての使用法を見つけるを提供するため、目的の実装に簡単にナビゲートできます。

4
m0sa

Update 1がインストールされたVisual Studioは、この機能を実装しています。メンバーを右クリックすると、[定義に移動]のすぐ下に[実装に移動]が表示されます。

4
Jason Steele

この新しい無料のVisual Studio 2013 Extension Implementator をご覧ください。 Visual Studioエディターのコンテキストメニューに[実装に移動]オプションを追加します。

Resharperほど信頼性が高く高速ではありませんが、うまく機能します。

2
Yura

Visual Studioは、それが参照されている場所のみを通知できますが、これは粗すぎる可能性があります。

どのクラスがどのインターフェイスを実装するか、どのメソッドがどの他のメソッドを無効にするかなど、アプリケーションの構造について詳しく知ることができる他のツールがあります。個人的には、Understand For C/C++の使用を好みます。

1
Patrick

宣言に進むと、インターフェイスメソッドが開きます。実装に進むと、そのインターフェイスメソッドのコードを実装するクラス(インターフェイスメソッド自体ではありません)が表示されます。

更新

Jon Skeetがコメントで指摘したように(そして答える前に私は見逃していました)、私が説明した機能はVisual Studioの機能ではなくReSharperの機能であるかもしれません。

1
Jamie Dixon

いいえ。VSによって維持されるメモリコード構造は複雑ですが、コードナビゲーションはかなり厄介ですが、これは不可能です。

唯一の選択肢は、「すべての参照を検索」を使用したグローバル検索と、結果のリストの手動検索を実行して、型付き値の宣言、変換などを除外するか、VS内でコードエディター以外の他のツールを使用することです。かなり複雑で残念です。

0
George

Ctrl + F12ショートカットを試すことができます。 F12を使用した非インターフェイスメソッドに導くように、実装に導きます。 [VS 2017で試しましたが、他のバージョンについてはわかりません]

0
Akbar Badhusha