C# delegate委托及事件

delegate是什么?官方理解为委托,我这里把它理解成代理的意思,什么是代理?我们在公司请假时都会有代理人,就是他来替代你来干接下来的任务。
C#的委托是一种安全地封装方法的类型,它与 C 和 C++ 中的函数指针类似。与 C 中的函数指针不同,委托是面向对象的、类型安全的和保险的。委托的类型由委托的名称定义。
C#中的委托只指向方法的,可以是实例方法也可以是静态方法。委托类型派生自 .NET Framework 中的 Delegate 类。委托类型是密封的,不能从 Delegate 中派生委托类型,也不可能从中派生自定义类。由于实例化委托是一个对象,所以可以将其作为参数进行传递,也可以将其赋值给属性。


下面的示例声明了一个名为 Del 的委托,该委托可以封装一个采用字符串作为参数并返回 void 的方法。
public delegate void Del(string message);
1.代理声明的语法:
[public/private] delegate <返回值类型> <代理名称>(<参数列表>);


[public/private]:访问修饰符。
delegate:代理声明关键定,相当于类声明的Class关键定
<返回值类型>:代理所指向的方法的返回值类型
<代理名称>:代理类型的名称
<参数列表>:代理所的指向的方法的参数列表。


要想使代理对象能够指向一个方法,那这个方法的要满足两个条件
a.方法返回类型要与delegate声明中的“返回值类型”一致。
b.方法的形参形表要与delegate声明中的“参数列表”一致。
2、代理的实例化
上面的声明相当于定义了一个类型,要想用它,必须进行实例化。
Del delHandler = new Del(Method);
参数中的Method就是和委托签名一样的函数。
public void Method(string mes)
{
}
3、调用
就和调用方法一样,直接调用就可以了。
delHandler("hello world");


另外代理也有另外一种,是多播代理,一个代理上指定多个方法。当执行代理时,这多个方法依次执行。
[public/private] delegate void <代理名称>(<参数列表>);
多播代理所指向的方法应当是void类型(这和上面有点区别)
实例化和上面是一样的,只是挂接时需要挂多个。
Del delHandler = new Del(Method);
delHandler += new Del(Method1);
delHandler("hello world multi");
这样的上面Method和method1会依次执行。




代理的主要应用就是在事件处理,所以研究事件之前我们必须要理解delegate的概念。
.NET Framework 类库中的所有事件均基于 EventHandler 委托,定义如下:
public delegate void EventHandler(object sender, EventArgs e);


1.事件的定义使用event关键字:
public event Del delHandler;
从上面的代码我们可以看出来:事件就是一个代理类型的变量。
2.指定事件处理程序:
指定事件处理程序就是为事件挂接方法的过程。
delHandler +=new Del(Method);   //注册事件,传入方法
3.执行事件
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值