【发布时间】:2014-06-23 16:46:42
【问题描述】:
我正在尝试将事件从一个类转发到其中包含的对象(如此处所述:Forwarding events in C#)。但是,事件的类型不同。
例如,我有一个 Item 类,它公开了 EventHandler 类型的 ValueChanged 事件处理程序。 ItemHaver 类公开了一个EventHandler<StatusEventArgs>,它应该在Item.ValueChanged 发生时触发,但还应该提供附加信息。如何正确实现add/remove 到ItemValueChanged 事件声明?
在下面的代码中,add 方法中的 lambda 函数是否会执行正确的操作,如果是,那么处理 remove 的正确方法是什么?
class Item
{
public event EventHandler ValueChanged;
}
class ItemHaver
{
private int _status;
private Item _item;
public event EventHandler<StatusEventArgs> ItemValueChanged
{
add
{
_item.ValueChanged += value; // Wrong type
_item.ValueChanged +=
(obj, e) => value(obj, new StatusEventArgs(this._status));
}
remove
{
_item.ValueChanged -= // Does this even work?
(obj, e) => value(obj, new StatusEventArgs(this._status));
}
}
}
class StatusEventArgs : EventArgs
{
int Status { get; private set; }
StatusEventArgs(int status) { Status = status; }
}
【问题讨论】:
标签: c# events event-handling