将事件处理程序订阅到 null 的引用

Subscribe eventhandler to reference that is null

我目前正在编写一个应用程序,我在其中反序列化相对较大的对象(它们的大小也可以增长,具体取决于用户向它们添加的内容)。我不想将它们全部加载到 RAM 中,因为当它们很多时这可能会导致问题。

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

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

我想到了 "if there is an object and it raises that event handle it with that method"。



这是一些示例代码,虽然我已经认为它行不通,但我能想到的唯一方法..

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)        
    {
        /*...*/
    }
}

当然,您不能将事件处理程序订阅到仍为 null 的对象,但可以在为其分配非 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)
    {

    }
}