欢迎来到天天文库
浏览记录
ID:1692994
大小:143.50 KB
页数:6页
时间:2017-11-13
《c#委托、lambda表达式》由会员上传分享,免费在线阅读,更多相关内容在应用文档-天天文库。
1、委托、Lambda表达式1.委托2(1)委托的本质2(2)使用委托的示例2(3)委托的Invoke与BeginInvoke方法21、Invoke方法22、BeginInvoke方法23、委托的EndInvoke方法3(4)Action、Func与Predicate(泛型委托)31、Action无返回值的泛型委托32、Func带有返回值的泛型委托43、Predicate委托(常用于集合参数)4(5)多播委托4(6)使用委托定义匿名方法52.Lambda表达式5(1)Lambda表达式本质5(2)Lambda表达式使用示例5(3
2、)Lambda表达式语法61、表达式Lambda语法(参数语法)62、语句Lambda语法(函数体语法)63、类型猜测64、Lambda式中的变量作用域6作者:李志伟时间:2014-01-181.委托(1)委托的本质委托实际上就是指向函数的指针。在C#中委托是一种类型,定义一个委托就是定义一个新的类,它与类的地位是一样的,所以可以定义类的地方都可以定义委托!实际上,使用delegate关键字定义的委托继承了System.MulticastDelegate类,而System.MulticastDelegate类又继承了System.Delegate。Delega
3、te:表示委托,委托是一种数据结构,它引用静态方法或引用类实例及该类的实例方法。MulticastDelegate:表示多路广播委托;即,其调用列表中可以拥有多个元素的委托。(2)使用委托的示例delegatestringDelegateMethod(inta,intb);//定义委托classProgram{staticvoidMain(string[]args){DelegateMethoddm=newDelegateMethod(Method);//或:DelegateMethoddm=MethodConsole.WriteLine(dm(10,20))
4、;//执行委托Console.Read();}privatestaticstringMethod(inta,intb){return"相加结果:"+(a+b);}}(3)委托的Invoke与BeginInvoke方法1、Invoke方法实际上,给委托实例提供圆括号与调用委托的Invoke方法效果完全相同:delegatestringDelegateMethod(inta,intb);//定义委托classProgram{staticvoidMain(string[]args){DelegateMethoddm=Method;Console.WriteLine(
5、dm.Invoke(10,20));//执行委托Console.Read();}privatestaticstringMethod(inta,intb){return"相加结果:"+(a+b);}}2、BeginInvoke方法调用委托实例的BeginInvoke方法就是开启一个新的线程执行委托实例指向的方法。delegatevoidDelegateMethod(inta,intb);//定义委托classProgram{staticvoidMain(string[]args){DelegateMethoddm=Method;for(inti=0;i<10;i
6、++){dm.BeginInvoke(i,20,null,null);//异步调用委托}Console.Read();}privatestaticvoidMethod(inta,intb){Console.WriteLine("相加结果:"+(a+b));//执行委托}}BeginInvoke方法有三种参数,第一种参数是委托实例指向的方法的参数(可能有多个);第二种参数的类型是AsyncCallback,AsyncCallback是一个委托类型,其定义是delegatevoidAsyncCallback(IAsyncResultar),当调用BeginInvo
7、ke方法的委托实例异步执行完成时,就会执行该参数指向的方法;第三种参数是object类型,主要是向第二种参数传递一些值,一般可以传递被调用方法的委托,这个值可以使用IAsyncResult.AsyncState属性获得。(具体请参考“C#多线程”)delegatevoidDelegateMethod(inta,intb);//定义委托classProgram{staticvoidMain(string[]args){DelegateMethoddm=Method;dm.BeginInvoke(10,20,MethodCompleted,null);//异步调用
8、委托Console.Read();}/
此文档下载收益归作者所有