我正在尝试将事件从一个类转发到其中包含的对象(如下所述:在 C# 中转发事件 https://stackoverflow.com/questions/1065355/forwarding-events-in-c-sharp)。然而,事件的类型不同。
例如,我有一堂课Item
这暴露了一个ValueChanged
类型的事件处理程序EventHandler
。班上ItemHaver
暴露了一个EventHandler<StatusEventArgs>
,每当Item.ValueChanged
确实如此,但还应该提供额外的信息。我该如何正确实施add/remove
to the ItemValueChanged
事件声明?
在下面的代码中,lambda 函数将add
方法执行正确的操作,如果是这样,处理该问题的正确方法是什么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; }
}
我会尝试使用字典来映射处理程序。
class ItemHaver
{
private int _status;
private Item _item;
private Dictionary<EventHandler<StatusEventArgs>, EventHandler> handlersMap = new Dictionary<EventHandler<StatusEventArgs>, EventHandler>();
public event EventHandler<StatusEventArgs> ItemValueChanged
{
add
{
// _item.ValueChanged += value; // Wrong type
handlersMap.Add(value, (obj, e) => value(obj, new StatusEventArgs(this._status)));
_item.ValueChanged += handlersMap[value];
}
remove
{
_item.ValueChanged -= handlersMap[value];
}
}
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)