C# クラスの参照方法について

Category: visual studio cs_ja

Question

Beginner Model on Fri, 01 Mar 2019 01:57:55


C#のクラス参照について、お聞きしたいことがあります。

下記の構成にて、getPlay()を呼び出した際に、インスタンス化しているはずが _myclass3がnullになってしまっています。

おそらく、自分のクラス呼び出しが理解できていないと思うのですが、調べましたが分かりませんでしたので、ご教授いただきたいです。

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

Class1 {

  private Class2 _myclass2 = new Class2();

  private void Doplay()
  {
     _myclass.getPlay();
   }

  Private ICommand _playCommand;
  public ICommand playCommand
  {
     get
     {
         if( _playCommad == null)
         {
            _playCommand = new RelayCommand(x -> { Doplay(); };
          }
          return _playCommand;
      }
   }

}

publi partial class Class2 : System.Windows.Controls.UserControl
{
  privete Class3 _myclass3 = new Class3();

   public void   getPlay()
   {
        _myclass3.メソッド()
   }

}




Replies

SurferOnWww on Fri, 01 Mar 2019 02:45:48


アップされたコードは何だかよく分かりませんが、ひょっとして、

private Class2 _myclass2 = new Class2();

の Class2 と、

publi partial class class2 : System.Windows.Controls.UserControl

の class2 は違うから、そのあたりの影響とか? 違ったら失礼しました。

Beginner Model on Fri, 01 Mar 2019 03:00:35


早速回答ありがとうございます。

すみません。class2の「C」は大文字でした。

Class2の継承している、System.Windows.Controls.UserControlがいけないという事でしょうか?

SurferOnWww on Fri, 01 Mar 2019 03:30:13


> すみません。class2の「C」は大文字でした。

そういう基本的なミスがあるコードをアップしないで、少なくともコンパイルが通って問題が再現できる必要最低限の完全なコードをアップしてください。(あくまでで必要最低限でおねがいします。長いコードをベタっと貼り付けるのはダメです)

Azulean on Fri, 01 Mar 2019 03:49:01


null になっていることはどのように観測されました?

ステップ実行を組み合わせている、ブレークポイントを置いているなら細か目に手順を書いてもらえないでしょうか。

例外が出たということであれば、どの行で止まったかとその例外に関する情報も書いてもらった方がよさそうです。

あとは、デバッグ環境の情報もあった方が良いかもしれません。

Beginner Model on Fri, 01 Mar 2019 04:21:41


ご返信、ありがとうございます。

例外が出ました。

System.NullReferenceException

まさに記載した場所「_myclass3.メソッド() 」の呼び出し部分で発生しています。

例外の情報として、追加で「オブジェクト参照がオブジェクト インスタンスに設定されていません。」と出ています。

デバック環境は、Visual Studio2015です。


Beginner Model on Fri, 01 Mar 2019 04:25:58


申し訳ありませんでした。

以後、気を付けます。

SurferOnWww on Fri, 01 Mar 2019 04:47:15


すみませんとか言う必要はなくて、それより、前にお願いしたように、少なくともコンパイルが通って問題が再現できる必要最低限の完全なコードをアップしてください。


Azulean さんへの返信で、

> まさに記載した場所「_myclass3.メソッド() 」の呼び出し部分で発生しています。

と言われてますが、Class3 を定義するコードが書いてないというところは認識されてますか?

Beginner Model on Fri, 01 Mar 2019 06:44:24


そうですね。。大変失礼しました。

ただ、自己解決しそうです。どうやら、メソッド内で参照している値が例外を出していたようです。

浮足だっており、、正確な情報を出せずに申し訳ありません。

Azulean on Fri, 01 Mar 2019 13:08:31


浮足だっており、、正確な情報を出せずに申し訳ありません。

適切な情報量ってベテランでも難しいので、ある程度努力された結果であれば、謝る必要はありませんよ。
誰にも文句がつけられないぐらいきっちりと書いたところで、解決しないこともあるので、そういったケースでは不幸になりますからね。

あまりにも情報が足りなさすぎれば苦言を呈することもありますが、今回の投稿に対しては私の「何を観測しましたか?」から絞り込みはついたようなので、無駄ではなかったと思っています。
ちなみに、例外のスタックトレースは「発生した場所」なので、それを「呼び出した場所」ではない点に注意が必要なのと、デバッグで止まった場合は周りの変数を確認して、本当に自分が思ったものが null なのかはよく確認した方が良いです。
思い込みではまってしまって、無駄な時間を過ごしてしまうことは私も時々あるので・・・。