订阅eventhandler以引用null

时间:2016-02-24 23:18:48

标签: c# event-handling null-pointer

我正在编写一个应用程序,在其中我反序列化相对较大的对象(也可以根据用户添加的大小增加大小)。我不想将它们全部加载到RAM中,因为这可能会导致很多问题。

无论如何,我想处理由该类的已加载实例引发的事件(如果有一个已经是我的问题)。

如何将事件处理程序订阅到仍为null的对象?

我想到的是“如果有一个对象并且它会引发该事件使用该方法处理它”。



这里有一些示例代码和我能想到的唯一方法,虽然我已经认为它无法工作..

public class MyClassA
{
    public event EventHandler PropertyChanged;

    private string someProperty
    public string SomeProperty
    {
        set
        {
            someProperty = value;
            PropertyChanged?.Invoke(this, EventArgs.Empty);
        }
    }

    public static MyClassA Load(string path)
    {
        /*...*/
    }
}

public class MyClassB
{
    public MyClassA InstanceOfA { get; private set; }        

    public MyClassB
    {
        //InstanceOfA.PropertyChanged += MyEventHandler; Not working, NullReference
    }

    // Handle InstanceOfA.PropertyChanged here...
    public void MyEventHandler(object sender, EventArgs e)        
    {
        /*...*/
    }
}

1 个答案:

答案 0 :(得分:2)

当然,您不能将事件处理程序订阅到仍为null的对象,但是可以在为其指定非空值时进行订阅。
只需使用属性和支持字段:

public class MyClassB
{
    private MyClassA myVar;

    public MyClassA InstanceOfA
    {
        get { return myVar; }
        private set
        {
            myVar = value;
            if (myVar != null)
                myVar.PropertyChanged += MyEventHandler;
        }
    }

    public void MyEventHandler(object sender, EventArgs e)
    {

    }
}