委托和事件的关系

  • 格式:pdf
  • 大小:54.71 KB
  • 文档页数:1

委托和事件的关系

1.委托的定义:

delegate 是⼀种可⽤于封装命名或匿名⽅法的引⽤类型。 委托类似于 C++ 中的函数指针;但是,委托是类型安全和可靠的(MSDN的

定义)。委托是引⽤类型。

委托还有⼀些泛型委托:

Action只能委托⽆返回值的⽅法,⽽且可以传⼊的参数个数在0-16之间。

Predicate委托返回bool值的的⽅法,只能输⼊⼀个参数类型。

public class People

{

public event Predicate Compare;

public void Start()

{

if (this.Compare(1))

Console.WriteLine("开始");

else

Console.WriteLine("等待");

}

}

//调⽤

People p = new People();

p.Compare += (int preValue) => { if (preValue == 1)return true; else return false; };

p.Start();

Func绑定⼀个参数(范围0-16)但却返回 TResult 参数指定的类型值的⽅法

例如:Func Func Func

例如:

2.事件的定义:

事件是⼀种特殊的委托,是委托的⼀种特殊应⽤。委托是事件的基础,通过将委托与命名⽅法或者匿名⽅法关联,可以实例化委托,然

后委托实例化相应的事件。

 事件的使⽤⽅式:事件能通过+=和-=两个⽅式注册或者注销对其处理的⽅法,使⽤+=与-=操作符的时候,系统会⾃动调⽤对应的

add_XXX、remove_XXX 进⾏处理。

事件处理⽅法的绑定:在绑定事件处理⽅法的时候,事件出现在+=、-= 操作符的左边,对应的委托对象出现在+=、-= 操作符的右边。对应

以上例⼦,事件提供了更简单的绑定⽅式,只需要在+=、-= 操作符的右⽅写上⽅法名称,系统就能⾃动辩认。也可以使⽤匿名⽅法(例如:

personManager.MyEvent += delegate(string name){ Console.WriteLine("My name is "+name);)或者lambda表达式(例

如:personManager.MyEvent += (string name)=>{ Console.WriteLine("My name is"+name); })绑定事件。

⽰例:

测试⽰例