委托

定义

委托类型是怎么声明出来的?

委托是类类型,是引用类型的一种。

  1. using System;
  2. using System.Collections.Generic;
  3. namespace Combine
  4. {
  5. class Program
  6. {
  7. static void Main(string[] args)
  8. {
  9. // MyDele dele1 = new MyDele(M1());
  10. // 此处MyDele(M1)中M1后不加(),是由于是添加M1函数而不是调用M1函数、
  11. // dele1这个变量引用着一个MyDele类型的实例,该实例“包裹”着M1方法
  12. MyDele dele1 = new MyDele(M1);
  13. // 可以包裹多个函数,这样的委托也称为多播委托
  14. dele1 += M1;
  15. Student stu = new Student();
  16. dele1 += stu.SayHello;
  17. // 等同于
  18. // dele1 += (new Student()).SayHello;
  19. dele1.Invoke();
  20. dele1();
  21. // 实际操作中,大部分使用的是委托变量当做函数调用而不是使用.Invoke();
  22. }
  23. static void M1()
  24. {
  25. Console.WriteLine("M1 is called!");
  26. }
  27. }
  28. class Student
  29. {
  30. public void SayHello()
  31. {
  32. Console.WriteLine("Hello,I'm a student!");
  33. }
  34. }
  35. delegate void MyDele();
  36. }
  37. //包裹(引用)只是一种形容,约束是指委托对包裹着的方法的限制
  1. using System;
  2. using System.Collections.Generic;
  3. namespace Combine
  4. {
  5. class Program
  6. {
  7. static void Main(string[] args)
  8. {
  9. // 当委托中函数不符合签名时,如下示例解决方法
  10. // 1.添加一个成员函数
  11. // 2.函数满足两个成员变脸
  12. MyDele dele1 = new MyDele(Program.Add);
  13. int res = dele1(100,200);
  14. Console.WriteLine(res);
  15. }
  16. static int Add(int a, int b)
  17. {
  18. return a + b;
  19. }
  20. }
  21. delegate int MyDele(int a,int b);
  22. }

泛型委托

我们必需自己创建委托类型吗?

泛型委托的类型参数推断

Lambda表达式

方法与Lambda表达式之间的关系

如何把一个Lambda表达式赋值给一个委托类型变量

如何把一个Lambda表达式“喂”给个委托类型参数


LINQ