C# 匿名方法

我们已经提到过,委托是用于引用与其具有相同标签的方法。换句话说,您可以使用委托对象调用可由委托引用的方法。

匿名方法(Anonymous methods) 提供了一种传递代码块作为委托参数的技术。匿名方法是没有名称只有主体的方法。

在匿名方法中您不需要指定返回类型,它是从方法主体内的 return 语句推断的。

一、编写匿名方法的语法

匿名方法是通过使用 delegate 关键字创建委托实例来声明的。例如:

  1. delegate void NumberChanger(int n);
  2. ...
  3. NumberChanger nc = delegate(int x)
  4. {
  5. Console.WriteLine("Anonymous Method: {0}", x);
  6. };

代码块 Console.WriteLine("Anonymous Method: {0}", x); 是匿名方法的主体。委托可以通过匿名方法调用,也可以通过命名方法调用,即,通过向委托对象传递方法参数。例如:

  1. nc(10);

实例

下面的实例演示了匿名方法的概念:

  1. using System;
  2. delegate void NumberChanger(int n);
  3. namespace DelegateAppl
  4. {
  5. class TestDelegate
  6. {
  7. static int num = 10;
  8. public static void AddNum(int p)
  9. {
  10. num += p;
  11. Console.WriteLine("Named Method: {0}", num);
  12. }
  13. public static void MultNum(int q)
  14. {
  15. num *= q;
  16. Console.WriteLine("Named Method: {0}", num);
  17. }
  18. public static int getNum()
  19. {
  20. return num;
  21. }
  22. static void Main(string[] args)
  23. {
  24. // 使用匿名方法创建委托实例
  25. NumberChanger nc = delegate(int x)
  26. {
  27. Console.WriteLine("Anonymous Method: {0}", x);
  28. };
  29. // 使用匿名方法调用委托
  30. nc(10);
  31. // 使用命名方法实例化委托
  32. nc = new NumberChanger(AddNum);
  33. // 使用命名方法调用委托
  34. nc(5);
  35. // 使用另一个命名方法实例化委托
  36. nc = new NumberChanger(MultNum);
  37. // 使用命名方法调用委托
  38. nc(2);
  39. Console.ReadKey();
  40. }
  41. }
  42. }

当上面的代码被编译和执行时,它会产生下列结果:

  1. Anonymous Method: 10
  2. Named Method: 15
  3. Named Method: 30

🔚