gpt4 book ai didi

c# - 具有 2 个处理程序的事件 Func : which return to expect?

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

假设我有类 AB

A 类中,我有以下事件:

public event Func<bool> MyEvent;

和以下方法:

public bool GetResult()
{
return MyEvent();
}

B 类中,我有以下构造函数:

public B()
{
A a = new A();
a.MyEvent += a_MyEvent_one;
a.MyEvent += a_MyEvent_two;

bool result = a.GetResult();
}

private bool a_MyEvent_one()
{
return true;
}

private bool a_MyEvent_two()
{
return false;
}

那么,类 B 的构造函数末尾会出现什么结果,为什么?

最佳答案

您将获得最近添加的句柄的结果。

话虽如此,您不应该依赖这种行为。这就是为什么事件在概念上不应该使用具有返回值的委托(delegate)。即使定义了行为,大多数程序员也不知道这是做什么的,因此代码会很困惑。如果程序员认为顺序不重要(这通常是一个合理的假设),那么他们也可以更改定义处理程序的顺序。

请注意,这仅适用于未定义自己的 addremove 方法的事件。自动实现会将新的处理程序组合到维护此属性的 MultiCastDelegate 中。使用自定义 add/remove 方法的事件可以做任何它想做的事情,它可以随心所欲地触发事件,允许它做任何事情,比如例如选择要使用的不同返回值,使用所有返回值等。因此,如果在无法查看其源代码的类中看到一个事件,则无法知道是否会维护此属性。您无法知道它是否定义了自定义 add/remove 方法。

关于c# - 具有 2 个处理程序的事件 Func<bool> : which return to expect?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22360314/

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