158

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

たとえば、ASP.NET MVC にはいくつかの「ActionResult」型があり、それらはすべて基本クラスから継承/実装しActionResultます。

ViewJsonが有効な型であることを「知っている」だけでない限りActionResult、この情報を簡単に見つける方法はないようです。

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

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

さまざまなクラスに関するこの情報を発見するために、Visual Studio 以外のツールの提案もお待ちしています。例: Resharper に何か助けになるものはありますか?

4

19 に答える 19

171

VS2012 の場合、

  1. ソリューション エクスプローラーでファイルに移動する
  2. クラスを展開して選択する
  3. クラス項目 (ファイル項目ではない) を右クリック -> 派生型
于 2013-06-29T01:53:12.963 に答える
74

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

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

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

于 2011-01-25T08:37:25.657 に答える
48

確かに、Resharperはこれを行うことができます。そして、はるかに。

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

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


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

于 2008-11-11T22:40:32.020 に答える
14

これは最も怠惰な答えです(私はこの答えを誇りに思っています:)

私は 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();
于 2012-06-26T15:26:05.340 に答える
7

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

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

于 2012-10-19T15:34:04.533 に答える
5

Reflectorも使用できます。

検索するすべてのアセンブリを読み込み、型に移動して、[派生型] 項目を展開します。

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

于 2009-11-03T04:05:35.057 に答える
4

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

派生クラスを見る reSharper

于 2016-08-09T08:47:13.293 に答える
4

フレームワーク クラスについては、MSDN ライブラリを使用します。Inheritance Hierarchy セクションは両方向に進みます。ただし、一部の 3d パーティ ライブラリについてはあまり役に立ちません。

于 2008-11-11T22:51:16.070 に答える
3

クラスまたは名前空間をオブジェクト エクスプローラーからClass Digramファイルにドラッグします。

組み込みの .net クラスの素敵なクラス図を取得するには?

于 2011-12-28T10:59:17.800 に答える
1

タイプを選択して右クリック 何かを見る ---コード マップに表示 --オプションを選択します このタイプを継承する人のためにイメージ フォーマットを生成します .dgml ファイル フォーマットとして非常に優れたイメージとして、タイプに関するより多くの情報を提供します

于 2015-01-08T08:15:38.207 に答える
0

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

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);
}
于 2012-08-08T15:04:42.550 に答える
0

Visual Studio 2012 の場合 ( ReSharper なし)

  1. ソリューション エクスプローラーで、クラス (表示する派生クラス) を右クリックします。
  2. クラス ダイアグラムで、クラスを右クリックし、[派生クラスを表示] を選択します。
于 2013-09-18T12:39:42.980 に答える
0

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

于 2013-02-21T22:29:43.240 に答える