none
C#の型の現物を確認する方法 RRS feed

  • 質問

  • このたびはお世話になります。

    さて、ただいまC#にてMetroスタイルのとても簡単なテストアプリを作成しております。

    とりあえず起動されたらExitボタンを経て終了するものです。

    MessageDialog関数はどうすればコンパイルが成功するかわかりましたが、型として存在するMessageDialogの定義をF12で表示すると、表示されたもののそのテキストがどこに存在するものかわかりません。こうなると、その後利用しコンパイルエラーが発生しているNotifyType型をどうusing宣言すればよいかわかりません。

    CやC++の場合、includeパスを一通り検索すれば型の定義現物や、ある関数とその所属する型、またその他メンバーなどが把握できました。C#の場合、using情報の欠落したコードサンプルを利用したときに発生するコンパイルエラーを、どうやってみなさん収束させているのでしょうか。

    ご教示いただければ助かります。

    よろしくお願いいたします。

    2013年10月7日 11:22

回答

  • キャレットを型名の上に合わせてCtrl+ピリオドを入力してみて下さい。その型が属する名前空間の一覧が現れ、選択すればusingに追加することができます。

    // ただし、その型が属するアセンブリ(dll)が参照に追加されていないと一覧には現れません。

    2013年10月7日 11:33
  • 補足。

    .NETにおけるアセンブリ(dll/exe)は、プログラミング時点においてはC/C++における.hと.libの両方を兼ね合わせた存在です。

    // 当然のことながら、実行時点における.dllも兼ね備えます。

    参照に追加したアセンブリをソリューションエクスプローラから開いてやると、そのアセンブリに属する型(およびメンバ)の一覧をツリーで表示できます。

    • 回答としてマーク kendji_t 2015年12月25日 7:37
    2013年10月7日 11:52
  • 聞くまでもないことでは…? CやC++で何を#includeすればいいのかはどうやって調べますか? それと同じことです。

    どちらもドキュメントにきちんと記述されています。

    C#のMessageDialogであれば「メタデータ: Windows.winmd」と書かれていますし、C/C++のMessageBoxであれば、「Header : Winuser.h (include Windows.h)、Library: User32.lib、DLL: User32.dll」と書かれています。

    • 回答としてマーク kendji_t 2015年12月25日 7:38
    2013年10月7日 22:29
  • コンパイルエラーになっているところで右クリックし、「競合の解決」をクリックすれば、追加するusingの候補が出てきますから、それを選択すればusingが自動的に追加されます。ただし、参照設定されていないものは候補に出ませんので注意して下さい。


    ★良い回答には回答済みマークを付けよう! わんくま同盟 MVP - Visual C# http://d.hatena.ne.jp/trapemiya/

    2013年10月8日 0:16
    モデレータ
  • こちらにつきましては質問の中で

    >CやC++の場合、includeパスを一通り検索すれば型の定義現物や、ある関数とその所属する型、またその他メンバーなどが把握できました。

    失礼しました。includeパスを検索していたんですね。

    Visual Studioにはオブジェクトブラウザーがあります。この中で一通り検索できます。フィルターとしてWindowsを選択するとMetroアプリ用の一覧が得られます。C/C++のヘッダファイルと異なり、.NETはDLLファイルに含まれているメタデータなので、テキストエディタでの検索はできず、オブジェクトブラウザーなどの専用のブラウザが必要になります。

    ところで質問文にあるNotifyTypeはヒットしませんね。これはC/C++で言えばincludeパスに含まれていない標準以外のライブラリを使用していることに相当するでしょうか。その場合はやはりそのライブラリのドキュメントを参照するしかないと思います。

    2013年10月8日 1:15

すべての返信

  • キャレットを型名の上に合わせてCtrl+ピリオドを入力してみて下さい。その型が属する名前空間の一覧が現れ、選択すればusingに追加することができます。

    // ただし、その型が属するアセンブリ(dll)が参照に追加されていないと一覧には現れません。

    2013年10月7日 11:33
  • 補足。

    .NETにおけるアセンブリ(dll/exe)は、プログラミング時点においてはC/C++における.hと.libの両方を兼ね合わせた存在です。

    // 当然のことながら、実行時点における.dllも兼ね備えます。

    参照に追加したアセンブリをソリューションエクスプローラから開いてやると、そのアセンブリに属する型(およびメンバ)の一覧をツリーで表示できます。

    • 回答としてマーク kendji_t 2015年12月25日 7:37
    2013年10月7日 11:52
  • ご教示ありがとうございます。

    どのアセンブリを追加するのが妥当か判断するためには皆さんどういうファイルを参照されてますか?

    もしくはやはりリファレンス本を参照されてますか?

    2013年10月7日 16:38
  • 聞くまでもないことでは…? CやC++で何を#includeすればいいのかはどうやって調べますか? それと同じことです。

    どちらもドキュメントにきちんと記述されています。

    C#のMessageDialogであれば「メタデータ: Windows.winmd」と書かれていますし、C/C++のMessageBoxであれば、「Header : Winuser.h (include Windows.h)、Library: User32.lib、DLL: User32.dll」と書かれています。

    • 回答としてマーク kendji_t 2015年12月25日 7:38
    2013年10月7日 22:29
  • >CやC++で何を#includeすればいいのかはどうやって調べますか? それと同じことです。

    こちらにつきましては質問の中で

    >CやC++の場合、includeパスを一通り検索すれば型の定義現物や、ある関数とその所属する型、またその他メンバーなどが把握できました。

    とさせていただいております。

    ご教示の内容から察しますと、「それと同じこと」にはならず、「ドキュメントにきちんと記述されて」いるものを参照する以外には方法がなさそうですが、この「ドキュメント」についてお伺いします。

    これは印刷物でしょうか。PDFでしょうか。MSDNの提供するHTML形式文書でしょうか。現状ではMSDNのHTML中をうまく検索できず他の範囲の関係のない情報までヒットしてしまいます。

    ご教示いただけると助かります。

    2013年10月8日 0:16
  • コンパイルエラーになっているところで右クリックし、「競合の解決」をクリックすれば、追加するusingの候補が出てきますから、それを選択すればusingが自動的に追加されます。ただし、参照設定されていないものは候補に出ませんので注意して下さい。


    ★良い回答には回答済みマークを付けよう! わんくま同盟 MVP - Visual C# http://d.hatena.ne.jp/trapemiya/

    2013年10月8日 0:16
    モデレータ
  • こちらにつきましては質問の中で

    >CやC++の場合、includeパスを一通り検索すれば型の定義現物や、ある関数とその所属する型、またその他メンバーなどが把握できました。

    失礼しました。includeパスを検索していたんですね。

    Visual Studioにはオブジェクトブラウザーがあります。この中で一通り検索できます。フィルターとしてWindowsを選択するとMetroアプリ用の一覧が得られます。C/C++のヘッダファイルと異なり、.NETはDLLファイルに含まれているメタデータなので、テキストエディタでの検索はできず、オブジェクトブラウザーなどの専用のブラウザが必要になります。

    ところで質問文にあるNotifyTypeはヒットしませんね。これはC/C++で言えばincludeパスに含まれていない標準以外のライブラリを使用していることに相当するでしょうか。その場合はやはりそのライブラリのドキュメントを参照するしかないと思います。

    2013年10月8日 1:15