これは前の質問へのフォローアップです: 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 が正しい値になります。だから私の質問はこれです - クラスの静的関数は何らかの方法で静的クラス変数の異なるバージョンにアクセスしますか? 静的変数のメモリアドレスを確認しましたが、非静的関数と静的関数のどちらの内部にいるかによって実際に異なります。