-3

これがどのように機能するのか興味があります: 私のクラス Form1.cs では、オブジェクトを静的に宣言しました:

 public static Class1 class1;

Class1 のコンストラクタは次のようになります。

  public Class1()
{
    Form1.class1 = null;
}

MS VS 2010 で null 参照例外が発生することを期待していました

 class1 = new Class1();
 class1.showMSG();

しかし代わりに、class1 への参照を null に設定したことがないように、showMSG() (showMSG は静的ではありません) を実行するだけです。これについて何か考えはありますか?

4

3 に答える 3

4

class1 = new Class1();提供されたコードに従って、実際にここで初期化します。

あなたは最初にそれをnull

Form1.class1 = null;

  class1 = new Class1(); //INIT THE SAME (ACCORDING TO THE NAME) OBJECT
  class1.showMSG();      //CALL A METHOD ON IT.

編集

編集された質問によると:

public Class1()
{
    Form1.class1 = null;
}

はまだ の中にいるので、何もリセットしません。constructor終了時に、実際にはオブジェクトが構築され、以前に割り当てたのと同じオブジェクトに割り当てられますnull

于 2012-09-25T20:36:48.277 に答える
1

最後の 2 行を次のように分割すると、説明が最も簡単になるかもしれません。

var tmp = new Class1();  // makes class1 null
class1.showMSG();        // would raise exception, remove this line to proceed
class1 = tmp;            // class1 is no longer null
class1.showMSG();        // no exception, instance exists to call method on
于 2012-09-25T20:57:33.067 に答える