例如,这样的事情有什么问题吗?
private void button1_Click(object sender, EventArgs e)
{
Packet packet = new Packet();
packet.DataNotSent += packet_DataNotSent;
packet.Send();
}
private void packet_DataNotSent(object sender, EventArgs e)
{
Console.WriteLine("Packet wasn't sent.");
}
class Packet
{
public event EventHandler DataNotSent;
public void Send()
{
if (DataNotSent != null)
{
DataNotSent(null, EventArgs.Empty);
}
}
}
Run Code Online (Sandbox Code Playgroud)
如果它只是一个简单的整数变量声明它会没问题,因为一旦它超出范围,后来被垃圾收集器收集,但事件有点......更长寿?我是否必须手动取消订阅或采取任何措施以确保其正常工作?
它只是感觉......很奇怪.不确定它是否正确.通常当我添加到事件处理程序时,它会持续整个应用程序,所以我不确定在不断添加和删除事件处理程序时会发生什么.
从技术上讲,这段代码没有任何问题.由于packet
在方法完成后将不会有任何引用,因此也将(最终)收集订阅.
作为一种风格问题,我认为这样做非常不寻常.更好的解决方案可能是从中返回某种结果Send()
并将其作为基础.顺序代码更容易理解.
归档时间: |
|
查看次数: |
295 次 |
最近记录: |