我的代码中有一个方法,它的名字是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);
}
我的问题:
我在我的程序中以这种方式调用函数:
bindingSource_PositionChanged(nullptr, System::EventArgs::Empty);
我的问题1:是什么让System::EventArgs::Empty
传递给此函数的参数e
?或任何System::EventArgs^
。什么使得nullptr
传递给参数发送者?或任何System::Object^
发件人?
我在我的程序中以另一种方式调用该函数:
bindingSource_PositionChanged(nullptr, nullptr);
问题2:这个函数的参数e的nullptr
是什么?或者System::EventArgs^?
答案 0 :(得分:3)
当且仅当事件的订阅者对这些值执行某些操作并期望它们为非null时,这才会很重要。通常,sender
是对事件最“负责”的对象(实际上,通常但并非总是,订阅者订阅的对象)。 EventArgs
本身并不传达任何有趣的信息,因此调用者完全有可能不检查它;但是对于更有趣的事件,订阅者通常会从args访问某些信息 - 所以如果它是null
,这通常会失败。 EventArgs::Empty
只是避免每次都需要创建一个新的但不感兴趣的EventArgs
实例 - 因为没有信息,所有使用EventArgs
的事件也可能使用相同的实例。
您可以发送null
或sender
的{{1}};但如果阻止一些处理者爱你,不要感到惊讶。发送逻辑发送者和(假设没有任何更有趣的内容)args
。