1
37
从事件中返回值通常很难。在实践中,我发现在传递给事件的一组自定义EventArgs上包含一个可写属性要容易得多,然后在事件激发后进行检查——类似于WinForms FormClosing事件的Cancel属性。 |
2
28
我觉得这不是个好主意…事件基本上是多播委托,因此可以有多个处理程序。在这种情况下,您将接受哪个返回值? |
3
16
我能想到的最接近的例子是WinForms中的FormClosing事件。它允许窗体通过将EventArgs.Cancel属性设置为true来取消事件。为了执行类似的操作,您将使用返回值定义自己的事件args类作为该类的属性。然后在每次引发事件时传递事件args对象。引发事件的任何人都可以检查事件args对象的返回值。其他接收事件的人也可以检查或更改事件args对象。 更新: 我刚刚跑过 AppDomain.AssemblyResolve 事件,它似乎是一个返回值的事件。似乎您只需要声明一个返回值的委托类型,然后用该委托类型定义事件。不过,我还没有尝试过创建这样的活动。在事件参数上使用属性的一个优点是,事件的所有订阅服务器都可以看到以前的订阅服务器返回了什么。 |
4
13
我知道这已经是发帖后的一段时间了,但是我想用代码添加注释来解释达斯汀·坎贝尔的回答,如果有人遇到这个问题的话。我在决定什么是最佳实践时遇到了这篇文章,这就是答案的含义。 创建自己的自定义事件处理程序类
因此,当您创建事件委托时,您使用这样创建的事件参数。
在引发事件的类中,您声明事件。
因此,当您在类中触发事件时,监听事件的类可以只在事件体中设置e.dooverride=true;因为它将在触发事件的类中声明。 火灾事件,例如:
|
5
9
注意:只有最后一个事件返回结果。
|
6
8
我不知道这是否是最佳实践,但我是这样做的。
|
7
1
如果事件返回一个值,并且注册了多个处理程序,则事件返回最后一个调用处理程序的结果值。 请参阅 http://blogs.msdn.com/b/deviations/archive/2008/11/27/event-handlers-returning-values.aspx |
8
0
我像这样循环EventArgs的属性,并提取出它的x和y值。 private void navbarcontrol1_click(对象发送器,事件参数e) { int x=0; INTY=Y=0;
|
9
-1
|
Robert King · Unity C#语法问题-转换位置 1 年前 |
JBryanB · 如何从基本抽象类访问类属性 1 年前 |
law · 检查答案按钮的输入字符串格式不正确 2 年前 |
i_sniff_ket · 在unity之外使用unity类 2 年前 |