这是来自agsXMPP .Net程序集的示例。我已经阅读了代理,但我不确定如何适应这一行代码(等待登录发生,然后发送消息。我想我正在寻找的是理解为什么{ {1}}用我能理解的简单术语来实现这一点。
delegate(0)
答案 0 :(得分:4)
与
完全相同xmpp.OnLogin += EventHandler(MyMethod);
MyMethod在哪里
public void MyMethod(object o)
{
xmpp.Send(new Message(new Jid(JID_RECEIVER), MessageType.chat, "Hello, how are you?"));
}
答案 1 :(得分:2)
正如Abe所说,这段代码正在创建一个匿名函数。这样:
xmpp.OnLogin += delegate(object o)
{
xmpp.Send(
new Message(new Jid(JID_RECEIVER), MessageType.chat, "Hello, how are you?"));
};
在旧版本的.Net中已经完成如下(我已经排除了类声明等等,只保留了基本元素):
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);
在任何一种情况下,您正在做的是将您的方法与xmpp OnLogin事件触发时的运行相关联。
答案 2 :(得分:2)
OnLogin
可能是一个声明如下的事件:
public event LoginEventHandler OnLogin;
其中LoginEventHandler
是委托类型,可能声明为:
public delegate void LoginEventHandler(Object o);
这意味着,要订阅该活动,您需要提供与LoginEventHandler
代理签名匹配的方法(或anonymous method / lambda expression)。
在您的示例中,您使用delegate
关键字传递匿名方法:
xmpp.OnLogin += delegate(object o)
{
xmpp.Send(new Message(new Jid(JID_RECEIVER),
MessageType.chat,
"Hello, how are you?"));
};
匿名方法匹配OnLogin
事件所期望的委托签名(void返回类型+一个对象参数)。您还可以删除利用contravariance的object o
参数,因为它未在匿名方法体内使用。
xmpp.OnLogin += delegate
{
xmpp.Send(new Message(new Jid(JID_RECEIVER),
MessageType.chat,
"Hello, how are you?"));
};
答案 3 :(得分:1)
delegate(object o){..}
告诉编译器将括号内的任何内容打包为稍后要执行的对象,在这种情况下触发OnLogin
。如果没有delegate()
语句,编译器会认为您正在尝试在assignemnt语句中执行操作并为您提供错误。
答案 4 :(得分:0)
这就是创建一个匿名函数。此功能是在C#2.0中引入的
答案 5 :(得分:0)
它用作匿名方法,因此您无需在其他位置声明它。这非常有用。
在这种情况下,它的作用是将该方法附加到由于onLogin
事件而触发的操作列表。
答案 6 :(得分:0)
同意安倍,这是一种匿名方法。匿名方法就是 - 没有名称的方法,可以作为参数参数提供。
显然,OnLogin对象是一个事件;使用+ =运算符可确保在引发OnLogin事件时执行上述匿名委托指定的方法。
答案 7 :(得分:0)
基本上,当触发xmpp事件的“OnLogin”事件时,{}内的代码将运行。根据名称,我猜这个事件会在登录过程中的某个时刻触发。
语法:
delegate(object o) { statements; }
是一种称为匿名的方法。您问题中的代码与此无关:
public class MyClass
{
private XMPPObjectType xmpp;
public void Main()
{
xmpp.OnLogin += MyMethod;
}
private void MyMethod(object o)
{
xmpp.Send(new Message(new Jid(JID_RECEIVER), MessageType.chat, "Hello, how are you?"));
}
}
答案 8 :(得分:0)
您正在订阅xmpp中的OnLogin事件。
这意味着当xmpp触发此事件时,将触发匿名委托内的代码。它是回调的优雅方式。
在Xmpp中,这样的事情正在发生:
// Check to see if we should fire the login event
// ALso check to see if anything is subscribed to OnLogin
// (It will be null otherwise)
if (loggedIn && OnLogin != null)
{
// Anyone subscribed will now receive the event.
OnLogin(this);
}