当我们需要将nullptr传递给对象^或EventArgs时?以及为什么要将EventArgs :: Empty传递给EventArgs ^?

时间:2013-07-03 11:55:18

标签: .net methods c++-cli eventargs nullptr

我的代码中有一个方法,它的名字是bindingSource_PositionChanged。 它的定义是:

private: System::Void bindingSource_PositionChanged(**System::Object^  sender, System::EventArgs^  e**) 
{
    toolStripStatusLabel->Text = String::Format("Datensatz {0:N0} von {1:N0}", bindingSource->Position + 1, bindingSource->Count);
}

我的问题:

  1. 我在我的程序中以这种方式调用函数:

    bindingSource_PositionChanged(nullptr, System::EventArgs::Empty);
    

    我的问题1:是什么让System::EventArgs::Empty传递给此函数的参数e?或任何System::EventArgs^。什么使得nullptr传递给参数发送者?或任何System::Object^发件人?

  2. 我在我的程序中以另一种方式调用该函数:

    bindingSource_PositionChanged(nullptr, nullptr);
    

    问题2:这个函数的参数e的nullptr是什么?或者System::EventArgs^?

  3. 类型的任何参数

1 个答案:

答案 0 :(得分:3)

当且仅当事件的订阅者对这些值执行某些操作并期望它们为非null时,这才会很重要。通常,sender是对事件最“负责”的对象(实际上,通常但并非总是,订阅者订阅的对象)。 EventArgs本身并不传达任何有趣的信息,因此调用者完全有可能不检查它;但是对于更有趣的事件,订阅者通常会从args访问某些信息 - 所以如果它是null,这通常会失败。 EventArgs::Empty只是避免每次都需要创建一个新的但不感兴趣的EventArgs实例 - 因为没有信息,所有使用EventArgs的事件也可能使用相同的实例。

可以发送nullsender的{​​{1}};但如果阻止一些处理者爱你,不要感到惊讶。发送逻辑发送者和(假设没有任何更有趣的内容)args