gpt4 book ai didi

.net - 在运行时以通用方式将事件处理程序分配给对象实例

转载 作者:行者123 更新时间:2023-12-04 06:32:45 25 4
gpt4 key购买 nike

我正在尝试创建一个通用方法,该方法在运行时将事件处理程序分配(和取消分配)到对象实例的事件。

就像是:

private void MyMethod<TEventArgs>(...)
where TEventArgs : EventArgs
{
EventHandler<TEventArgs> eventHandler = (s, e) =>
{
// logic
}

// want to assign eventHandler to an object instance passed into this method

// more logic

// want to deassign eventHandler from object instance
}

目前,我正在传递一个 assignEvent 和 deassignEvent 委托(delegate),例如:
private void MyMethod<TEventArgs>(Action<EventHandler<TEventArgs>> assignEvent, Action<EventHandler<TEventArgs>> deassignEvent)
{
EventHandler<TEventArgs> eventHandler = (s, e) =>
{
// logic
}

assignEvent(eventHandler);

// more logic

deassignEvent(eventHandler);
}

然后像这样调用方法:
var myObject = new MyObject();
MyMethod<MyEventArgs>(e => myObject.MyEvent += e, e => myObject.MyEvent -= e);

但这似乎真的很可怕!

我还有什么其他选择?

最佳答案

这里可能更好的选择是将其转换为 IObservable<T> , 通过使用 Observable.FromEvent (在 Rx 框架中)。这允许您以一流的方式处理事件本身,将其传递给您的方法,然后 Dispose()最后订阅。

关于.net - 在运行时以通用方式将事件处理程序分配给对象实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5197233/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com