6

本周两次,我读到人们写了一个事件(.net)被“抛出”。我一直认为与事件一起使用的动词是“fire”或“raise”。我认为“抛出”用于异常,但不是事件(“raise”可用于任何一种)。

是否有其他人发现“抛出”事件令人困惑?

4

9 回答 9

18

我同意,事件被引发/触发/触发。如果有任何东西被抛出,那就是例外。

于 2009-03-16T14:25:40.163 回答
7

MSDN 库中的标准约定似乎是指Raising an Event and Throwing an Exception

于 2009-03-16T15:05:08.477 回答
5

另一个术语是“调用”。由于事件是委托,它们被调用来调用它们,但是是的,一般术语是“解雇”或“引发”。

此外,在这种情况下使用“throw”这个词是令人困惑的,因为它会与“throw”关键字混淆。不能使用 throw 关键字抛出事件。

于 2009-03-16T14:28:08.973 回答
3

Raise 是 MSDN 文档中最常见的动词。

我同意 - 如果我听说有东西被抛出,我认为这是一个例外。C# 语言使这一点非常明确 - throw 是用于异常的保留字。

于 2009-03-16T14:26:29.647 回答
3

尽管有可能throw不是例外的事情,但很明显,这throw仅适用于例外情况。Raise确实是您用来表示事件已经发生的术语。

于 2009-03-16T14:30:48.170 回答
3

不,它们不能被扔掉,但就像矮人和霍比特人一样,它们可以被扔掉。

于 2009-03-16T14:39:04.127 回答
2

我认为可以抛出事件,但如果你真的这样做,那就是不称职的编码。

让我解释。在 C++ 中,您可以抛出任何类型。你可以抛出布尔值。你可以扔enum error_type。你可以扔std::exception。当然你也可以扔struct XEvent.

但是如果你真的做了,你很可能正在做一些非常错误或非常混乱(因此是错误的)的事情。

我完全赞成不要重载单词的含义,以避免歧义(不需要存在的地方)。

我认为“抛出”通常被理解为暗示调用堆栈展开(因为当你有一个定义明确的堆栈时,但我认为它可以扩展到一个无界入度的单链表;也就是说,一个父指针树)。让我们坚持下去。

“raise”一词也用于信号。如果也可以避免将其用于事件,那就太好了。

我更喜欢在事件发生时“触发”(“onMouseOver 事件刚刚触发”),并且可能在事件侦听器通知消费者时“被触发”(“XMouseMotionNotify 事件被发送给客户端”)。

于 2009-05-27T17:42:03.187 回答
1

您通常会听到人们提到被解雇或引发的事件。但在我看来,投掷完全没问题。关键是他们是否说事件被抛出。

不要试图分裂成许多头发。我们的职业已经足够复杂,有成千上万种技术,更不用说考虑我们沟通方式的细微差别了。

于 2009-03-16T14:27:04.543 回答
1

我会说你发布一个事件。

于 2009-03-16T14:57:49.557 回答