代码之家  ›  专栏  ›  技术社区  ›  Mike Rosenblum

没有参数的事件应该定义自己的自定义EventArgs,还是只使用System.EventArgs?

  •  12
  • Mike Rosenblum  · 技术社区  · 16 年前

    我有一个当前定义的没有事件参数的事件。也就是说,它发送的EventArgs为EventArgs.Empty。

    EventHandler<System.EventArgs> MyCustomEvent;
    

    因此,我倾向于让我的所有事件始终创建一个空事件args类型,该类型源自 System.EventArgs ,即使当前不需要事件参数。大概是这样的:

    public class MyCustomEventArgs : EventArgs
    {
    }
    

    EventHandler<MyCustomEventArgs> MyCustomEvent;
    

    所以我的问题是:定义我自己的好吗 MyCustomEventArgs ,即使它除了从继承之外没有添加任何内容 System.EventArgs ,以便用户更清楚地知道没有额外的事件参数?

    迈克

    2 回复  |  直到 14 年前
        1
  •  14
  •   adrianbanks    16 年前

    从…起 Framework Design Guidelines Brad Abrams和Krzysztof Cwalina所著:

    考虑使用一个子类 EventArgs 作为事件参数,除非您绝对确定事件永远不需要携带任何数据到事件处理方法,在这种情况下,您可以使用 直接打字。

    如果您使用 如果不破坏兼容性,您将永远无法直接添加要随事件携带的任何数据。如果使用子类,即使最初完全为空,也可以在需要时向子类添加属性。

    事件标记 对于您自己的派生类,但由于它只会破坏您自己的代码,所以这不是一个太大的问题。

        2
  •  9
  •   Alfred Myers    16 年前

    YAGNI

    我建议坚持使用EventArgs,只有当你真正需要它时才使用它。


    更新:

    阿德里安银行 指出,, 如果 您的代码将被不受您控制的其他代码(即您无法自己编译的代码)使用 重新编译消费者代码会很麻烦,那么您应该使用 EventHandler<YourEventArgs> .

    推荐文章