none
変数のウォッチでCS1061エラーが発生 RRS feed

  • 質問

  • WPFでAppクラスに記述したパブリックの変数が他のクラスでウォッチができせん。

    下記のコードを実行するとメッセージボックスに”テスト”と表示されます。
    デバッグモードで、MessageBox.Showの引数の”App.モード”をウォッチすると次のエラーが表示されます。

    「  App.モード error CS1061: 'Application' に 'モード' の定義が含まれておらず、型 'Application' の最初の引数を受け付ける拡張メソッド 'モード' が見つかりませんでした。using ディレクティブまたはアセンブリ参照が不足していないことを確認してください。 」

    コーディングが悪いのか、デバッグの設定の不足なのかが分かりません。
    よろしくお願いいたします。

    namespace WpfApplication1 { public partial class App : Application { public static string モード = "テスト"; } } namespace WpfApplication1 { public partial class MainWindow : Window { public MainWindow() { InitializeComponent(); MessageBox.Show(App.モード); } } }


    2017年10月28日 6:48

回答

  • 現象はVS2010でもVS2017でもでもでますね。
    原因はSystem.Windows.WindowにAppという名前のプライベートなインスタンスプロパティが定義されていて、そちらを優先してしまうからです。
    他のクラスでも発生するというなら同様に優先されるプロパティかフィールドがあるのでしょう。

    回避するにはWpfApplication1.App.モードやglobal::WpfApplication1.App.モードのように名前空間も付加します。

    #ウォッチウィンドウやクイックウォッチウィンドウで発生するのだからウォッチで正しいですよ


    個別に明示されていない限りgekkaがフォーラムに投稿したコードにはフォーラム使用条件に基づき「MICROSOFT LIMITED PUBLIC LICENSE」が適用されます。(かなり自由に使ってOK!)

    2017年10月29日 0:01
  • ウォッチウインドウで参照するAppが異なるので明確に指定をしないといけないのですね。
    「System.Windows.WindowにAppという名前のプライベートなインスタンスプロパティ」とは
    ウォッチウインドウ(もしくはウオッチ機能?)に定義されていると理解しました。
    (だから、アプリケーション自体は問題なく動作する。)

    MainWindow の継承元である Window クラスに private で App プロパティがいると言うことです。
    https://referencesource.microsoft.com/#PresentationFramework/src/Framework/System/Windows/Window.cs,72e79afb54bc20bf

    継承元の private なので自分が実装する際には気にする必要はありませんが、ウォッチは private であろうと表示できる仕様なので、親クラスに定義されている存在の方が優先されたのでしょう。

    2017年10月29日 12:09

すべての返信

  • 質問するときはまず開発環境のバージョンやOSのバージョンに関して明記するようにしましょう。

    System.Windows.Applicationクラス型のフィールドもしくはプロパティを、誤って「App」という名前でWpfApplication1.MainWindowクラスの中に定義していたりしないですか?

    エラーメッセージを見る限り、コンパイラは当該コードをWpfApplication1.Appクラスの静的フィールドの参照ではなく、System.Windows.Applicationクラスが持つインスタンスメンバーの参照と判断しているものと思われます。シンボル名のスコープと優先順位に注意してください。

    なお、「ウォッチする」という言葉の使い方が間違っています。より適切な言葉は「参照する」です。「ウォッチ」は通例デバッグ実行中にデバッガーで変数の中身を閲覧することを指します。

    ちなみに一般的なコーディング上のアドバイスとして、いくらC#ではシンボル名に日本語が使えるからといって、安易に日本語を使わないほうがよいです。また、カプセル化の観点からも、クラスのフィールド変数をpublic公開するのは極力避けるべきで、プロパティなどのアクセッサーを用意すべきです。

    • 編集済み sygh 2017年10月28日 10:16
    2017年10月28日 9:49
  • 現象はVS2010でもVS2017でもでもでますね。
    原因はSystem.Windows.WindowにAppという名前のプライベートなインスタンスプロパティが定義されていて、そちらを優先してしまうからです。
    他のクラスでも発生するというなら同様に優先されるプロパティかフィールドがあるのでしょう。

    回避するにはWpfApplication1.App.モードやglobal::WpfApplication1.App.モードのように名前空間も付加します。

    #ウォッチウィンドウやクイックウォッチウィンドウで発生するのだからウォッチで正しいですよ


    個別に明示されていない限りgekkaがフォーラムに投稿したコードにはフォーラム使用条件に基づき「MICROSOFT LIMITED PUBLIC LICENSE」が適用されます。(かなり自由に使ってOK!)

    2017年10月29日 0:01
  • sygh 様 ご回答ありがとうございます。

    開発環境等の記載を忘れていました。
    ご指定ありがとうございます。

    環境はVisualStadio2015 Update3 Windows10 64bitとなります。

    2017年10月29日 5:05
  • gekka様

    ご回答ありがとうございます。
    WpfApplication1.App.モード で ウォッチできました。

    ウォッチウインドウで参照するAppが異なるので明確に指定をしないといけないのですね。
    「System.Windows.WindowにAppという名前のプライベートなインスタンスプロパティ」とは
    ウォッチウインドウ(もしくはウオッチ機能?)に定義されていると理解しました。
    (だから、アプリケーション自体は問題なく動作する。)

    当初デバッグ設定の不備ではないかと思ったのですが仕様の範疇ですね。(前述の私の理解が正しければ。)

    今回は極めて小規模(画面2個程度)なアプリケーションなので、
    共通変数としてAppクラスに記述したのですが、
    静的クラスを別に作成しようと思います。

    理解が異なる様でしたら、ご指摘をお願いいたします。

    2017年10月29日 5:59
  • ウォッチウインドウで参照するAppが異なるので明確に指定をしないといけないのですね。
    「System.Windows.WindowにAppという名前のプライベートなインスタンスプロパティ」とは
    ウォッチウインドウ(もしくはウオッチ機能?)に定義されていると理解しました。
    (だから、アプリケーション自体は問題なく動作する。)

    MainWindow の継承元である Window クラスに private で App プロパティがいると言うことです。
    https://referencesource.microsoft.com/#PresentationFramework/src/Framework/System/Windows/Window.cs,72e79afb54bc20bf

    継承元の private なので自分が実装する際には気にする必要はありませんが、ウォッチは private であろうと表示できる仕様なので、親クラスに定義されている存在の方が優先されたのでしょう。

    2017年10月29日 12:09
  • Watanabe NS さん、こんにちは。
    フォーラム オペレーターの立花楓です。

    このたびはご投稿いただきましてありがとうございます。

    今回、「Windows クライアント開発」 フォーラムに投稿いただいた内容ですが、「Windows Presentation Foundation ( WPF )」フォーラムにてご質問いただいたほうが情報が集まりやすいと思いましたので、移動させていただきました。

    MSDNフォーラム > .Net Framework > Windows Presentation Foundation ( WPF )
    https://social.msdn.microsoft.com/Forums/ja-JP/home?forum=wpfja&filter=alltypes&sort=lastpostdesc


    また、今後参考になる情報がありましたら、投稿者からの [回答としてマーク] をお願いいたします。

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


    MSDN/TechNet Community Support 立花楓


    2017年10月31日 5:42
    モデレータ