代码之家  ›  专栏  ›  技术社区  ›  Greg D

为什么要使用EventArgs.Empty而不是null?

  •  63
  • Greg D  · 技术社区  · 16 年前

    protected virtual OnSomethingHappened()
    {
        this.SomethingHappened(this, EventArgs.Empty);
    }
    

    e应该是EventArgs。如果没有有趣的事件args,则为空,而不是null。

    我遵循了代码中的指导,但我意识到我不清楚为什么这是首选技术。为什么声明的契约更喜欢EventArgs.Empty而不是null?

    6 回复  |  直到 6 年前
        1
  •  35
  •   Mitchel Sellers    16 年前

    我相信NOTNULL背后的原因是,当作为参数传递时,该方法不需要潜在地处理NULL引用异常。

        2
  •  27
  •   Martin Konicek Phil Windley    11 年前

    EventArgs.Empty Null object pattern .

    基本上,使用一个表示“no value”的对象来避免在使用它时检查null。

        3
  •  8
  •   Stephen Kennedy annamataws    6 年前

    我相信 EventArgs.Empty 用于维护使用事件传递参数的约定,即使不需要。

    Mitchel Sellers在我的帖子的中途发布了我的另一半原因:如果一个方法尝试对该参数执行某些操作(除了检查它是否为null之外),它可以防止出现null引用异常。

    EventArgs.Empty 基本上是在没有附加信息的情况下执行全局定义的事件参数。

    为了给出一个维护约定的类似示例,我们的团队使用 string.Empty 初始化字符串,因为其他不同的编码器可能会使用 newString = ""; or newString = " "; or newString = null; ,对于不同的检查条件,所有这些都可能产生不同的结果。

    使用的理由(有点迂腐) EventArgs.Empty vs new EventArgs() 前者不初始化新的 EventArgs ,节省了少量内存。

        4
  •  2
  •   Mark Cidade    16 年前

    EventHandler 从任何事件处理程序调用并通过 object sender EventArgs e ,它可以呼叫 e.ToString() ,例如,用于记录事件,而不必担心空指针异常。

        5
  •  0
  •   Patrick Desjardins    16 年前

        6
  •  0
  •   Bobak_KS    11 年前

    来自Albahari的书: "in order to avoid unnecessarily instantiating an instance of EventArgs."