在C#事件模式中,为什么使用sender参数?

问题描述 投票:0回答:1

在 C# 中的典型事件模式中,我通常会看到调用对象作为参数发送,例如:

// in the invoking class
private void TriggerMyEvent()
{
    MyEvent?.Invoke(this, new MyEventArgs());
}

// in the subscriber class
private void OnMyEvent(object sender, MyEventArgs e)
{
    // do stuff
}

我见过这种方式被广泛使用,但感觉这种模式有点难以使用并且很容易被滥用:

  • 如果你想使用参数并强制转换它,你需要跟踪事件被调用的位置并查看对象的类型。
  • 如果发件人不会被使用,那么即使它不存在也会更清楚。
  • 如果您将使用像 MyEventArgs 这样的参数,则该参数可以包含发送者。您甚至可以将类型放入参数中,绕过转换。

那么,为什么这个约定是这样的呢?我的评论有错吗?使用此发送器的“干净”方式是什么?

c# events sender
1个回答
0
投票
发送 Sender 参数,以便在某些情况下事件处理程序可以根据事件处理程序中实现的逻辑设置某些属性的值。其次,有一些基于 C#.NET 构建的第三方库,这些库的 sender、args 参数都需要根据需要编写自定义代码。可以通过继承EventArgs来创建EventArgs类。扩展发送方以添加自定义属性、方法将增加代码开销。将发送者添加到 EventArgs 会增加开销。传递发送者有助于将对象层次结构传递给事件处理程序。

最新问题
© www.soinside.com 2019 - 2025. All rights reserved.