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 回答