C#之委托、事件、lambda

来源:互联网 发布:js判断是否为身份证号 编辑:程序博客网 时间:2024/06/06 04:17

委托

委托是什么?

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

委托的使用

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

委托的声明

<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,添加方法2strop-=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匿名方法都是建立在委托基础上的,都是委托对象实现的。

1 0