委托

C#里这个委托我的理解是可以看成是一个方法模板的类型。(不过并没有找到相关的理解

比如有几个返回值,参数列表类型相同的方法,就能用同个模板类型来表示,然后实例化一个委托类型就绑定上一个或多个方法,然后就可以一次调用这多个方法,相当于把方法对象化?。

using System;
namespace test {
class Test{
static void fun1(int a) {
Console.WriteLine("fun one {0}",a);
}
static void fun2(int a)
{
Console.WriteLine("fun two {0}", a);
}
static void fun3(int a)
{
Console.WriteLine("fun three {0}", a);
} //定义一个委托类型
public delegate void fun(int b);
static void Main(string[] args)
{
fun a, b, c, d,e;
//绑定方法
a = fun1;
b = fun2;
c = fun3;
d = fun1;
d += fun2;
d += fun3;
e = new fun(fun1);
//调用方法
a(1);
b(2);
c(3);
d(4);
d -= fun2;
d(4);
e(2);
Console.ReadKey();
}
}
}

事件

事件需要用到委托,或者说是一种特殊的委托。

事件比起委托其实就多了一个关键字event,起到一个对委托的保护作用,有了event,外部就无法直接去调用发布者内部的委托,因为这是不合理的,发布者何时发布这个委托函数应该是发布者自己决定的。

using System;
namespace test {
/***********发布器类***********/
public class EventTest
{
public delegate void NumManipulationHandler(); //声明委托
public NumManipulationHandler ChangeNum; //声明事件 public void OpenDoor()
{
ChangeNum(); //事件触发
}
} /***********订阅器类***********/
public class subscribEvent
{
public void printf()
{
Console.WriteLine("The door is opened.");
}
} /***********触发***********/
public class MainClass
{
public static void Main()
{
EventTest e = new EventTest(); /* 实例化事件触发对象 */
subscribEvent v = new subscribEvent(); /* 实例化订阅事件对象 */ /* 订阅器的printf()在事件触发对象中注册到委托事件中 */
e.ChangeNum += new EventTest.NumManipulationHandler(v.printf);
e.OpenDoor(); /* 触发了事件 */
e.ChangeNum();
Console.ReadKey();
}
}
}

最新文章

  1. Windows 通用应用尝试开发 “51单片机汇编”总结
  2. 对于类的双重调用的demo
  3. Node.js爬虫抓取数据 -- HTML 实体编码处理办法
  4. IplImage 与 QImage 相互转换
  5. (MVVM) button enable 时,UI没有被刷新。
  6. 完全自定义 TabBar
  7. Django 403错误:CSRF verification failed. Request aborted
  8. HDU 4729 An Easy Problem for Elfness (主席树,树上第K大)
  9. 【转】[Mysql] Linux Mysql 日志专题
  10. POJ3259负环判定
  11. Combine Two Tables
  12. java虚拟机学习-JVM调优总结-典型配置举例(10)
  13. asp.net Mvc 动态创建Controller
  14. Java的HelloWorld程序
  15. [poj1279]Art Gallery
  16. linux串口编程设置(转载)
  17. 洗礼灵魂,修炼python(52)--爬虫篇—【转载】爬虫工具列表
  18. 由于找不到 MSVCR100.dll,无法继续执行代码
  19. IOT-web替换某一个前台版本
  20. 01c++学习

热门文章

  1. [2015普及组-D]推销员 思维que
  2. [LC] 74. Search a 2D Matrix
  3. UFT安装目录简单介绍
  4. marry|psych up|make it|Fireworks|be to blame for|
  5. 关于使用css变量实现主题的切换效果
  6. 初级vector
  7. 用nexus搭建maven2内部服务器
  8. 三分钟学会使用Derby数据库
  9. onbeforeunload事件兼容性操作
  10. 使用document.domain+iframe跨域实例