将事件处理程序订阅到 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)
{
}
}
我目前正在编写一个应用程序,我在其中反序列化相对较大的对象(它们的大小也可以增长,具体取决于用户向它们添加的内容)。我不想将它们全部加载到 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)
{
}
}