What is this delegate call doing in this line of c

2019-02-24 08:18发布

This is from an example accompanying the agsXMPP .Net assembly. I've read up on delegates, but am not sure how that fits in with this line of code (which waits for the logon to occur, and then sends a message. I guess what I'm looking for is an understanding of why delegate(0) accomplishes this, in the kind of simple terms I can understand.

xmpp.OnLogin += delegate(object o) { 
    xmpp.Send(new Message(new Jid(JID_RECEIVER), 
    MessageType.chat, 
    "Hello, how are you?")); 
};

标签: c# delegates
9条回答
The star\"
2楼-- · 2019-02-24 09:14

It's exactly the same as

xmpp.OnLogin += EventHandler(MyMethod);

Where MyMethod is

public void MyMethod(object o) 
{ 
    xmpp.Send(new Message(new Jid(JID_RECEIVER), MessageType.chat, "Hello, how are you?")); 
}
查看更多
Melony?
3楼-- · 2019-02-24 09:16

The delegate(object o){..} tells the compiler to package up whatever is inside the brackets as an object to be executed later, in this case when OnLogin is fired. Without the delegate() statement, the compiler would think you are tying to execute an action in the middle of an assignemnt statement and give you errors.

查看更多
何必那么认真
4楼-- · 2019-02-24 09:18

As Abe noted, this code is creating an anonymous function. This:


xmpp.OnLogin += delegate(object o) 
   { 
      xmpp.Send(
         new Message(new Jid(JID_RECEIVER), MessageType.chat, "Hello, how are you?")); 
   };

would have been accomplished as follows in older versions of .Net (I've excluded class declarations and such, and just kept the essential elements):


delegate void OnLoginEventHandler(object o);

public void MyLoginEventHandler(object o)
{
      xmpp.Send(
         new Message(new Jid(JID_RECEIVER), MessageType.chat, "Hello, how are you?")); 
}

[...]

xmpp.OnLogin += new OnLoginEventHandler(MyLoginEventHandler);

What you're doing in either case is associating a method of yours to run when the xmpp OnLogin event is fired.

查看更多
登录 后发表回答