Visual Studioでは、基本クラスから継承されたすべてのクラスを表示するにはどうすればよいですか?
たとえば、、ASP.NET MVCにはいくつかの「 ActionResult 」タイプがあり、それらはすべて、基本クラスActionResult
。
View
とJson
が有効なActionResult
型であることを「認識」しない限り、この情報を簡単に見つける方法はありません。
間違っていることを証明してください。
これを簡単に見つけられるようにするオブジェクトブラウザには何かありますか?
さまざまなクラスに関するこの情報を発見するために、Visual Studio以外のツールの提案を求めています。たとえば、Resharperには私を助けてくれるものがありますか?
確かに、 Resharper はこれを行うことができます。その他。
任意の場所でタイプ名を右クリックし、コンテキストメニューで[継承者に移動]を選択します。 「Go To Inheritor」は、オーバーライドにナビゲートするためのメソッドおよびインターフェイスメソッドの実装にも適用できます。インターフェースの場合は、「Find Usages Advanced」を再度呼び出すことができます。右クリックするだけで、すべての拡張機能と実装を見つけることができます。タイプの場合-派生タイプ。そして、私のお気に入りの機能-宣言に移動するために、任意のタイプ/メソッドでControlを押しながらクリックします。
.net開発者にとって必須のツールだと思います。
Resharper 9.2では、ソースコードの任意のタイプで、「Find Usage Advanced」をクリックし、Find = "Derived"およびScope = "Solutions and Libraries"を選択します。
たとえば、任意のベンダーからのDLL)に含まれる基本クラスのすべての継承者(ライブラリとコードの両方)を見つけるには、コードで変数を宣言します次に、入力したベースクラス名を右クリックします。
VS2012の場合、
これには必ずしもReflectorは必要ありません。VisualStudioの「クラス図」ビューを使用すると、特定のクラスのすべての派生クラスも簡単に見つけることができます。 [クラスビュー]でクラスを右クリックし、[クラス図の表示]を選択します。ダイアグラムに階層の詳細レベルが表示されない場合は、ダイアグラム内のクラスのボックスを右クリックして、「派生クラスの表示」を選択します。
Resharperほど直接的ではないかもしれませんが、R#をまだお持ちでない場合はオプションです。
残念ながら、Visual Studioのどの特定のバージョンにあるかはわかりません。
これは最も遅延の少ない答えです(この答えを誇りに思っています:)
私はReSharperを持っていないので、以前に試してみましたが、買いたくありませんでした。クラス図を試してみましたが、階層図が3倍にまたがり、ラップトップの画面の幅が無限ではないため、まったく実用的ではありません。私の自然で簡単な解決策は、次のように、アセンブリ内の型を反復処理するWindowsフォームコードを記述し、リフレクションを使用してノードをツリービューに追加することでした。
このコードが実行されるフォームに必要なテキストボックス、ツリービュー、その他のものがあると仮定してください
//Go through all the types and either add them to a tree node, or add a tree
//node or more to them depending whether the type is a base or derived class.
//If neither base or derived, just add them to the dictionary so that they be
//checked in the next iterations for being a parent a child or just remain a
//root level node.
var types = typeof(TYPEOFASSEMBLY).Assembly.GetExportedTypes().ToList();
Dictionary<Type, TreeNode> typeTreeDictionary = new Dictionary<Type, TreeNode>();
foreach (var t in types)
{
var tTreeNode = FromType(t);
typeTreeDictionary.Add(t, tTreeNode);
//either a parent or a child, never in between
bool foundPlaceAsParent = false;
bool foundPlaceAsChild = false;
foreach (var d in typeTreeDictionary.Keys)
{
if (d.BaseType.Equals(t))
{
//t is parent to d
foundPlaceAsParent = true;
tTreeNode.Nodes.Add(typeTreeDictionary[d]);
//typeTreeDictionary.Remove(d);
}
else if (t.BaseType.Equals(d))
{
//t is child to d
foundPlaceAsChild = true;
typeTreeDictionary[d].Nodes.Add(tTreeNode);
}
}
if (!foundPlaceAsParent && !foundPlaceAsChild)
{
//classHierarchyTreeView.Nodes.Add(tn);
}
}
foreach (var t in typeTreeDictionary.Keys)
{
if (typeTreeDictionary[t].Level == 0)
{
classHierarchyTreeView.Nodes.Add(typeTreeDictionary[t]);
}
}
StringBuilder sb = new StringBuilder();
foreach (TreeNode t in classHierarchyTreeView.Nodes)
{
sb.Append(GetStringRepresentation(t, 0));
}
textBox2.Text = sb.ToString();
「Visual Studio 2015 Update 1」からは、クラスコードエディターでクラス名を右クリックし、ショートカットメニューからCtrl + F12を使用してコンテキストメニューから[実装に移動]を選択できます。
https://blogs.msdn.Microsoft.com/dotnet/2015/11/30/whats-new-in-visual-studio-update-1-for-net-managed-languages/ を参照してください詳細については。
これについてはまだ誰も言及していないので、追加します。
Jetbrains dotPeekは無料の.NETデコンパイラであり、この情報を簡単に表示できます。
無料ダウンロード: http://www.jetbrains.com/decompiler/
JetbrainsはResharperを製造する会社です。
ActionResult
と入力しますActionResult
クラス宣言で、右クリックして[派生シンボル]を選択しますResharper がインストールされていると仮定します:クラス/インターフェイスにカーソルを置いて、右クリック-検査-階層
これは、サブクラス、実装、およびスーパークラスを示しています。
Reflector を使用することもできます。
調べたいすべてのアセンブリを読み込み、型に移動して、派生型項目を展開します。
これはオブジェクトブラウザーでも実行できますが、何らかの理由でVS2008は.Net Frameworkビューの1つでのみ実行できます。 (VS2010 Beta 2はどのビューでも実行できます)
Frameworkクラスの場合、MSDNライブラリを使用します。継承階層セクションは両方向に進みます。確かに、いくつかのサードパーティのライブラリにはあまり役立ちません。
ReSharper (バージョン2016.1.2)の助けを借りて Ctrl+Alt+Click 基本クラス。次のようなものが表示されます。
Object ExplorerからClass Diagramファイルにクラスまたは名前空間をドラッグします。
タイプを選択し、右クリックして何かを見る---コードマップで表示する--optionこのオプションを選択すると、.dgmlファイル形式としてこのタイプを継承する人のイメージを生成し、タイプに関する詳細な情報を提供します。
vS2012にアップグレードした場合は、「コードマップ」を使用できます。
継承階層を表示するタイプを右クリックして、「コードマップに追加」を選択します。次に、コードマップビューでノードを展開し、右クリックして[派生クラス/基本クラスの表示]を選択できます。残念ながら、.NETが提供するクラスでは機能しません。
コーディングするだけです。
Assembly asm = Assembly.LoadFrom(PATH_TO_PROJECT_OUTPUT);
var types = from t in asm.GetTypes()
where t.BaseType != null && t.BaseType.ToString() == "System.Web.UI.Page"
// if you want to add reference - where typeof (System.Web.UI.Page).Equals(t.BaseType)
select t;
foreach (var type in types)
{
Console.WriteLine(type);
}
Visual Studio 2012の場合(ReSharperなし)
Visual Assistを使用する場合のオプションとして、ShiftキーとAltキーを押しながらGキーを押して(キャレットがクラス名にあるときに)、[後藤関連]コンテキストメニューを表示できます。派生クラスがある場合は、サブメニューが表示されますそのため、それらをすべてリストし、それらの派生クラス間の継承構造を示します。