码迷,mamicode.com
首页 > Windows程序 > 详细

C#之委托、事件、lambda

时间:2016-05-12 13:02:35      阅读:230      评论:0      收藏:0      [点我收藏+]

标签:

委托

委托是什么?

委托是一种封装方法的特殊机制,可以帮助程序员更灵活的调用相应的方法。

委托的使用

委托是一个可以引用方法的对象,所以在创建委托时,实际创建的是一个存储方法引用的对象。在程序运行期间,同一个委托能够用于调用不同的方法,只要改变它引用的方法就可以。所以,委托调用的方法不是在编译时确定的,而是在运行的时候确定的。

委托的声明

<span style="font-family:Microsoft YaHei;font-size:18px;">public delegate void DelegateClass()
</span>

委托的使用方法

(1)DelegateClass dc1=new DelegateClass(Program.Fangfa1);

(2)DelegateClass dc2=new DelegateClass(Fangfa1);

(3)DelegateClass dc3=Fangfa1;

(4)Aclass ac=new Aclass();

DelegateClass dc4=new DelegateClass(ac.Fangfa2);

多播委托

多播委托是指允许创建方法的调用列表或者链表的能力。当调用多播委托时,这些方法均会自动执行。如果委托具有返回值,则将列表中最后一个方法的返回值用做整个委托调用的返回值。方法链表的创建:首先实例化一个委托,然后使用“+”或“+=”运算符为链表添加方法。在移除一个方法的时候,可以使用“-”或“-=”运算符。

<span style="font-family:Microsoft YaHei;font-size:18px;">public delegate void StrOp(ref string str)
StrOp strop;
StrOp op1=Hanshu1;
StrOp op2=Hanshu2;
strop=op1;
//移除方法1,添加方法2
strop-=op1;
strop+=op2;
</span>

事件

事件构建在委托的基础上,事件是一种信号机制,它在某些操作发生时自动地发出通知。事件定义为对象发送的消息,发信号通知操作的发生。

声明事件

public event AbcDelegate Abcevent;

AbcDelegate是委托名称, Abcevent;是事件名称

使用事件

(1)订阅事件

eventname += delegatename

eventname:事件名称

delegatename:方法名称

(2)取消订阅事件

eventname -= delegatename

lambda

lambda用于创建匿名方法

表达式:param=>expr

param(参数)

expr(表达式)

<span style="font-family:Microsoft YaHei;font-size:18px;">public delegate int Adelegate(int abm)
class Program
{
      static void Main(string[] args)
      {
             Adelegate a=count=>count+5;
             int x=0;
             for(int i=0;i<10;i++)
            {
                   x=a(x);
                   Console.WriteLine(x);
            }
            Console.ReadLine();
       }
}</span>


Ps:

事件和lambda匿名方法都是建立在委托基础上的,都是委托对象实现的。

C#之委托、事件、lambda

标签:

原文地址:http://blog.csdn.net/istari/article/details/51360199

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!