请教各位﹐我在http://www.dotblogs.com.tw/code6421/archive/2010/08/26/17419.aspx看了Wp7的sample, 但其中有一段语法不懂, 想请大大们指点一下范例中由RIA Service 取得数据
_client.GetCustomersCompleted += (s, args) => {
foreach (var item in args.Result.RootResults) {
Items.Add(item);
}
};我知道事件的指定是用+=, 但是这个后面直接接(s, args)是什么意思呢?
看起来像是参数, 但 s 和 args 各指的是什么呢? 什么时候给值呢?
然后 "=>" 这又是什么意思呢?
_client.GetCustomersCompleted += (s, args) => {
foreach (var item in args.Result.RootResults) {
Items.Add(item);
}
};我知道事件的指定是用+=, 但是这个后面直接接(s, args)是什么意思呢?
看起来像是参数, 但 s 和 args 各指的是什么呢? 什么时候给值呢?
然后 "=>" 这又是什么意思呢?
http://msdn.microsoft.com/zh-cn/library/bb311046.aspx
后面是Lambda 表达式
可以注销,不过不是很方便而已。
方法详见
http://blog.csdn.net/wuyazhe/archive/2010/09/29/5915151.aspx
两个方面:第一,是可以获取委托对象的。声明了引用委托的变量EventHandler<GetCustomersCompletedEventArgs> method;之后可以写_client.GetCustomersCompleted += method= (s, args) => {
foreach (var item in args.Result.RootResults) {
Items.Add(item);
}
};
第二,几乎所有的事件委托都是无需手动撤销的。只有那些注册到不会释放的对象的委托,比如我们把对象X上的一个方法注册为对象K上的一个事件处理程序,而当我们完全不在使用对象X时,对象K却不会释放、一直使用下去,这时候对象X也就无法被GC释放,X上的方法总是会被触发,才需要先去手动撤销这个委托。几乎我们遇到的所有程序,都是不去考虑撤销委托得情况,而是在对象K被使用完的时候就释放它,于是它的所有事件委托的引用就被自动撤销了。
这是匿名方法,为了简洁使用的表达式Lambda,不需要声明函数。
是在难于理解可以这样看:
_client.GetCustomersCompleted += f(s, args);
void f(s, args)
{
foreach (var item in args.Result.RootResults) {
Items.Add(item);
}
foreach (var item in args.Result.RootResults) {
Items.Add(item);
}
};
_client.GetCustomersCompleted += method;这样method变量就可以用于 -= 操作。这样我们就知道lamda表达式或者匿名委托,用在+=和-=的方面也是很方便的。