.net delegate(委托类型)

    本质上,委托是指向若干方法的类型安全的对象(类似c++函数指针)。一个委托维持有三项重要的信息:1,它要调用的方法的地址 2,方法的参数(如果有的话)3,方法的返回值(如果有的话)。和c++函数指针不同的是,.net 委托可以指向静态方法和实例方法。

 

    首先来看看如何定义一个委托(使用关键字delegate

  1. // 这个委托可以指向任何接收两个int参数并返回int值的方法
  2. //二元操作
  3. public delegate int BinaryOp(int x, int y);

你在声明这个BinaryOp委托的时候,编译器会为你生成这样的一个类:

  1. sealed class BinaryOp : System.MulticastDelegate
  2. {
  3. public BinaryOp(object target, uint functionAddress);
  4. public int Invoke(int x, int y);
  5. public IAsyncResult BeginInvoke(int x, int y,
  6. AsyncCallback cb, object state);
  7. public int EndInvoke(IAsyncResult result);
  8. }

其中,Invoke是核心方法,顾名思义,是用来调用委托中维持的每个方法。BeginInvoke() 和EndInvoke()用来异步调用当前的方法。这个需要你有多线程编程的背景,超出了本文要描述的范围。这里你只要理解委托其实暗中实现了本来要用多线程才能实现的功能。

待续……

初次认识委托,可能会觉得有点困惑。现在来看看一个完整的例子:

  1. namespace SimpleDelegate
  2. {
    • // 这个委托可以指向任何接收两个int参数并返回int值的方法
    • //二元操作
  3. public delegate int BinaryOp(int x, int y);
  4. // 该类包含BinaryOp要指向的方法
  5. //
  6. public class SimpleMath
  7. {
  8. public static int Add(int x, int y)
  9. return x + y; }
  10. public static int Subtract(int x, int y)
  11. return x - y; }
  12. }
  13. class Program
  14. {
  15. static void Main(string[] args)
  16. {
  17. Console.WriteLine("***** Simple Delegate Example *****/n");
  18. // 创建一个指向SimpleMath.Add()的BinaryOp对象
  19. // 
  20. BinaryOp b = new BinaryOp(SimpleMath.Add);
  21. // 调用Add()方法 ,间接 使用了delegate 对象.
  22. Console.WriteLine("10 + 10 is {0}", b(10, 10));
  23. Console.ReadLine();
  24. }
  25. }
  26. }

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值