gpt4 book ai didi

C# 有哪些替代方法可以沿调用链传播事件?

转载 作者:行者123 更新时间:2023-11-30 20:38:37 25 4
gpt4 key购买 nike

假设 Main.cs 调用 sub.cs,而 sub.cs 调用 action.csaction.cs 引发 sub.cs 订阅的事件,但是 sub.cs 不关心事件它只是 main.cs 想知道这个所以 sub.cs 再次引发事件,以便 main.cs 可以订阅它并发现 action.cs 引发了原始事件;这看起来很麻烦。

除了通过一系列方法调用传递事件之外,还有哪些替代方案?

最佳答案

你可以直接在Action暴露的事件上附加Sub暴露的事件,当然事件需要在Sub Action :

class SubClass
{
public event EventHandler MyEvent
{
add
{
_action.MyEvent += value;
}
remove
{
_action.MyEvent -= value;
}
}

private ActionClass _action;
}

使用此解决方案,您仍然需要声明两次事件,但您不需要链接方法调用,并且可以在 SubClass 中省略事件处理程序。

当然还有其他选择,但您可能需要更改设计,而且我没有足够的上下文来提出任何建议。一般来说,我会从最简单的解决方案开始。如果您只需要冒泡一个事件,这可能就足够了,但如果您需要公开其中的许多事件,那么您可以考虑引入第三个对象,它公开您需要的内容并通过 SubClass 访问 来自 ActionClass,像这样(但请使用更好的名称):

public sealed class Notifications
{
public event EventHandler MyEvent;

internal void RaiseMyEvent(EventArgs e)
{
var myEvent = MyEvent;
if (myEvent != null)
myEvent(this, e);
}
}

class MyAction
{
public Notifications Notifications
{
get { return _notifications; }
}

// ...
}

class SubClass
{
public Notifications Notifications
{
get { return _action.Notifications; }
}

// ...
}

请注意,此示例只是概念验证。

关于C# 有哪些替代方法可以沿调用链传播事件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34987242/

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