インターフェイスのすべての実装をどのように見つけますか?
-
05-07-2019 - |
質問
C#で定義されたインターフェイスがあるとします。インターフェイスの実装を提供するすべてのクラスを見つける最も簡単な方法は何ですか?
ブルートフォースの方法は、「参照の検索」を使用することです。 Visual Studioで手動で結果を調べて使用法を実装から分離しますが、比較的少ない実装で頻繁に参照される大規模なコードベースのインターフェイスの場合、これには時間がかかり、エラーが発生しやすくなります。
Javaでは、コードベースでjavadocを実行すると(-privateオプションを使用してプライベートクラスを含める)、インターフェイスのドキュメントページが生成されます(例: Comparable )には、インターフェースのすべての実装クラスとサブインターフェースが含まれます(ただし、クラスの実装クラスは含まれません)サブインターフェイスは、リストされているサブインターフェイスにドリルダウンすることで、比較的簡単に決定できます)。私が探しているのはこの機能ですが、C#とVisual Studioを使用しています。
解決
(コメントに基づいて編集...)
ReSharperがインストールされている場合:
Visual Studioで、タイプ名を右クリックし、「継承者に移動」を選択します。または、タイプ名を選択し、ReSharper / View / Type Hierarchyに移動して新しいタブを開きます。 (メニューにはキーボードショートカットが表示されます-これは異なる場合があるため、検索方法を説明しました:)
ReSharperがない場合:
他のヒント
メソッド名(インターフェイスの定義または他のクラスの実装)を右クリックして、[呼び出し階層の表示]を選択できます。 [呼び出し階層]ウィンドウには、[実装]があります。インターフェースメソッド実装のすべての場所を見つけることができるフォルダー。
カーソルをクラスまたはインターフェイスタイプに置き、
CTRL + F12
Visual Studio 2010+を使用
メンバーメソッドを右クリックして、呼び出し階層の表示を選択します。 Implementsフォルダーを展開します。これは、メソッドが属するインターフェースを実装するすべてのタイプをリストします。
Resharper 7を使用
インターフェースを右クリック>移動>派生シンボル。 太字にリストされている記号は、インターフェースから直接派生しています。太字でないシンボルはスーパークラスから派生しています。
Visual Studio 2015を使用している場合、実装に移動。試してみてください。
拡張機能をインストールしたら、インターフェイス(IUrlShortenerなど)を右クリックして、[ Go To Implementation
]メニューをクリックします。インターフェイスを実装するクラスが1つしかない場合、メニューをクリックすると、そのクラスに直接移動できます。インターフェイスを実装するクラスが複数ある場合、すべてのクラスがリストされます。
Visual Studio 2015を使用している場合は、Visual Studio 2015 Update 1 RCをインストールしてください。 Visual Studioブログ:
本日、Visual Studio 2015 Update 1 RCをリリースしました。これは、3週間前にリリースしたUpdate 1 CTPに基づいています。ここで説明するCTPで導入された機能に加えて、リリース候補には次のものが含まれています。
- 実装に移動。多くの人が待ち望んでいた機能:インターフェースまたは抽象メソッドを右クリックし、このコマンドを選択して実装に移動します。
この機能はVSに組み込まれているとは思わないが、IIRC Resharper にはこれがあります。
インターフェイスの正規表現検索を実行できます。
:(\ *[^},]+,)*\ *IMyInterfaceName
CTRL + SHIFT + Fは、次のウィンドウを起動します。
「ナビゲート先...」オプション。関数呼び出しにカーソルを置いて、次を試してください:
ショートカットキー:
- Ctrl +、(Ctrl +カンマ)
メニュー:
- 編集メニュー
- [次へ移動...]をクリックします
利点:
- 「すべての参照を検索」などの参照をすべて表示しません。
- "タイプ"実装のどのインターフェイスであるかを記録します
Shift + F12キーを使用して、定義を含むすべての参照を表示します。
resharper ALT + END ショートカットを使用すると、すべての継承者を見つけるのに役立ちます。
doxygen はJavadocと同じように.Netになっていると(聞いたことはありませんが)聞いたことがありますjava。