0

これは前の質問へのフォローアップです: C# Static event null from within class

私はこのようなクラスを持っています:

public class PlaylistModel {
    public static event EventHandler PlaylistLoadError;
    public static int myInt;

    public static void LoadPlaylist() 
    {
        try 
        {    
            // do some stuff, simulate exception
            throw new InvalidOperationException();
        } 
        catch(InvalidOperationException ex) 
        {
           EventHandler handler = PlaylistLoadError;
           if(handler != null)  
           {
               PlaylistLoadError(null, null);
           }
        }
    }
}

プログラムの他の場所では、次のように PlaylistLoadError EventHandler を設定しています。

public class MainPage {

    public MainPage() {
        PlaylistModel.PlaylistLoadError += MyErrorHandler;
        PlaylistModel.myInt = 5;
    }

    public static void MyErrorHandler(object sender, EventArgs e)
    {
        Debug.WriteLine("There was an error");
    }
}

現在、LoadPlaylist の内部では、PlaylistLoadError は null で、myInt は 0 ですが、別の場所に設定されています。後で PlaylistModel のインスタンスを作成すると、PlaylistLoadError と myInt が正しい値になります。だから私の質問はこれです - クラスの静的関数は何らかの方法で静的クラス変数の異なるバージョンにアクセスしますか? 静的変数のメモリアドレスを確認しましたが、非静的関数と静的関数のどちらの内部にいるかによって実際に異なります。

4

1 に答える 1

1

静的変数は静的であり、変更するために何かが呼び出されない限り、プログラムの実行中は同じままです。

何が起こっているのか知りたい場合は、フィールドを次のように変更します。

private static int _myInt;

次に追加します。

public static int myInt
{ 
    get { return _myInt; } 
    set { _myInt = value; }
}

次に、ブレークポイントを on に追加しsetて、いつ変更されているかを確認できるようにします。

于 2013-01-23T19:13:37.867 に答える