0

I have a method in my code, it's name is bindingSource_PositionChanged. the definition of it is:

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);
}

My questions:

  1. I have in my program calling the function in this way:

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

    my Question 1: what makes pass System::EventArgs::Empty to the parameter e of this function? or to any System::EventArgs^. and what makes pass nullptr to the parameter sender here? or to any System::Object^ sender?

  2. I have in my program calling the function in another way:

    bindingSource_PositionChanged(nullptr, nullptr);
    

    Question 2: what makes a nullptr to the parameter e of this function? or to any parameter of the type System::EventArgs^?

4

1 回答 1

3

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

可以发送null或发送senderargs但如果这会阻止一些处理程序爱你,请不要感到惊讶。最好发送逻辑发送者和(假设没有更有趣的东西),。EventArgs::Empty

于 2013-07-03T12:05:25.480 回答