委托
委托是什么?
委托是一种封装方法的特殊机制,可以帮助程序员更灵活的调用相应的方法。
委托的使用
委托是一个可以引用方法的对象,所以在创建委托时,实际创建的是一个存储方法引用的对象。在程序运行期间,同一个委托能够用于调用不同的方法,只要改变它引用的方法就可以。所以,委托调用的方法不是在编译时确定的,而是在运行的时候确定的。
委托的声明
<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匿名方法都是建立在委托基础上的,都是委托对象实现的。