我正在编写一个应用程序,在其中我反序列化相对较大的对象(也可以根据用户添加的大小增加大小)。我不想将它们全部加载到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)
{
/*...*/
}
}
答案 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)
{
}
}