web-dev-qa-db-ja.com

Visual Studio:基本クラスから継承されたすべてのクラスを表示するにはどうすればよいですか?

Visual Studioでは、基本クラスから継承されたすべてのクラスを表示するにはどうすればよいですか?

たとえば、、ASP.NET MVCにはいくつかの「 ActionResult 」タイプがあり、それらはすべて、基本クラスActionResult

ViewJsonが有効なActionResult型であることを「認識」しない限り、この情報を簡単に見つける方法はありません。

間違っていることを証明してください。

これを簡単に見つけられるようにするオブジェクトブラウザには何かありますか?

さまざまなクラスに関するこの情報を発見するために、Visual Studio以外のツールの提案を求めています。たとえば、Resharperには私を助けてくれるものがありますか?

123
Dan Esparza

確かに、 Resharper はこれを行うことができます。その他。

任意の場所でタイプ名を右クリックし、コンテキストメニューで[継承者に移動]を選択します。 「Go To Inheritor」は、オーバーライドにナビゲートするためのメソッドおよびインターフェイスメソッドの実装にも適用できます。インターフェースの場合は、「Find Usages Advanced」を再度呼び出すことができます。右クリックするだけで、すべての拡張機能と実装を見つけることができます。タイプの場合-派生タイプ。そして、私のお気に入りの機能-宣言に移動するために、任意のタイプ/メソッドでControlを押しながらクリックします。

.net開発者にとって必須のツールだと思います。


Resharper 9.2では、ソースコードの任意のタイプで、「Find Usage Advanced」をクリックし、Find = "Derived"およびScope = "Solutions and Libraries"を選択します。
たとえば、任意のベンダーからのDLL)に含まれる基本クラスのすべての継承者(ライブラリとコードの両方)を見つけるには、コードで変数を宣言します次に、入力したベースクラス名を右クリックします。

48
Shrike

VS2012の場合、

  1. ソリューションエクスプローラーでファイルに移動する
  2. クラスを展開して選択します
  3. (ファイル項目ではなく)クラス項目を右クリックします->派生型
135
countunique

これには必ずしもReflectorは必要ありません。VisualStudioの「クラス図」ビューを使用すると、特定のクラスのすべての派生クラスも簡単に見つけることができます。 [クラスビュー]でクラスを右クリックし、[クラス図の表示]を選択します。ダイアグラムに階層の詳細レベルが表示されない場合は、ダイアグラム内のクラスのボックスを右クリックして、「派生クラスの表示」を選択します。

Resharperほど直接的ではないかもしれませんが、R#をまだお持ちでない場合はオプションです。

残念ながら、Visual Studioのどの特定のバージョンにあるかはわかりません。

70
Michael Burr

これは最も遅延の少ない答えです(この答えを誇りに思っています:)

私は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();
13
Mzn

「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/ を参照してください詳細については。

11
Ahmad

これについてはまだ誰も言及していないので、追加します。
Jetbrains dotPeekは無料の.NETデコンパイラであり、この情報を簡単に表示できます。

無料ダウンロード: http://www.jetbrains.com/decompiler/

JetbrainsはResharperを製造する会社です。

派生クラスを見つける手順:

  1. DotPeekを起動します
  2. 「GACから開く...」を選択し、System.Web.MVCアセンブリを追加します
  3. 「Navigate/Go to type」を選択し、ActionResultと入力します
  4. ActionResultクラス宣言で、右クリックして[派生シンボル]を選択します
  5. 出来上がり!すべての派生クラスが表示されます(私が知らなかったいくつかのクラスです!)
9
Dan Esparza

Resharper がインストールされていると仮定します:クラス/インターフェイスにカーソルを置いて、右クリック-検査-階層

これは、サブクラス、実装、およびスーパークラスを示しています。

7
Tim

Try Visual Studio Class View

Visual Studioクラスビューで、興味のあるクラスに移動し、その基本クラスと派生クラスを見つけます

5
sigirisetti

Reflector を使用することもできます。

調べたいすべてのアセンブリを読み込み、型に移動して、派生型項目を展開します。

これはオブジェクトブラウザーでも実行できますが、何らかの理由でVS2008は.Net Frameworkビューの1つでのみ実行できます。 (VS2010 Beta 2はどのビューでも実行できます)

5
SLaks

Frameworkクラスの場合、MSDNライブラリを使用します。継承階層セクションは両方向に進みます。確かに、いくつかのサードパーティのライブラリにはあまり役立ちません。

4
Tom Juergens

ReSharper (バージョン2016.1.2)の助けを借りて Ctrl+Alt+Click 基本クラス。次のようなものが表示されます。

see derived classes reSharper

4
Devid

Object ExplorerからClass Diagramファイルにクラスまたは名前空間をドラッグします。

組み込み.netクラスのNiceクラス図を取得する方法?

3
Iman Abidi

タイプを選択し、右クリックして何かを見る---コードマップで表示する--optionこのオプションを選択すると、.dgmlファイル形式としてこのタイプを継承する人のイメージを生成し、タイプに関する詳細な情報を提供します。

1
Magesh K

vS2012にアップグレードした場合は、「コードマップ」を使用できます。
継承階層を表示するタイプを右クリックして、「コードマップに追加」を選択します。次に、コードマップビューでノードを展開し、右クリックして[派生クラス/基本クラスの表示]を選択できます。残念ながら、.NETが提供するクラスでは機能しません。

0
Andrei

コーディングするだけです。

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);
}
0
Mehmet Ataş

Visual Studio 2012の場合(ReSharperなし

  1. ソリューションエクスプローラーで、クラス(派生クラスを表示するクラス)を右クリックします。
  2. クラス図で、クラスを右クリックし、「派生クラスを表示」を選択します。
0
Abhijeet Nagre

Visual Assistを使用する場合のオプションとして、ShiftキーとAltキーを押しながらGキーを押して(キャレットがクラス名にあるときに)、[後藤関連]コンテキストメニューを表示できます。派生クラスがある場合は、サブメニューが表示されますそのため、それらをすべてリストし、それらの派生クラス間の継承構造を示します。

0
vdwtanner