上一节:
下一节:

  C# 匿名方法



  • 匿名方法

    我们讨论了使用委托来引用具有与委托相同签名的任何方法。换句话说,您可以使用该委托对象调用可由委托引用的方法。匿名方法提供了一种将代码块作为委托参数传递的技术。匿名方法是没有名称的方法,只有方法主体。您无需在匿名方法中指定返回类型;它是从方法体内的return语句推断出来的。
  • 编写匿名方法

    匿名方法是通过创建委托实例并使用委托关键字来声明的。例如,
    
    delegate void NumberChanger(int n);
    ...
    NumberChanger nc = delegate(int x) {
       Console.WriteLine("Anonymous Method: {0}", x);
    };
    
    
    代码块 Console.WriteLine("Anonymous Method:{0}",x); 是匿名方法的主体。
    可以使用匿名方法和命名方法以相同的方式调用委托,即通过将方法参数传递给委托对象。
    例如,
    
    nc(10);
    
    
    以下示例演示了概念-
    
    using System;
    
    delegate void NumberChanger(int n);
    namespace DelegateAppl {
       class TestDelegate {
          static int num = 10;
          
          public static void AddNum(int p) {
             num += p;
             Console.WriteLine("Named Method: {0}", num);
          }
          public static void MultNum(int q) {
             num *= q;
             Console.WriteLine("Named Method: {0}", num);
          }
          public static int getNum() {
             return num;
          }
          static void Main(string[] args) {
             //create delegate instances using anonymous method
             NumberChanger nc = delegate(int x) {
                Console.WriteLine("Anonymous Method: {0}", x);
             };
             
             //calling the delegate using the anonymous method 
             nc(10);
             
             //instantiating the delegate using the named methods 
             nc =  new NumberChanger(AddNum);
             
             //calling the delegate using the named methods 
             nc(5);
             
             //instantiating the delegate using another named methods 
             nc =  new NumberChanger(MultNum);
             
             //calling the delegate using the named methods 
             nc(2);
             Console.ReadKey();
          }
       }
    }
    
    
    尝试一下
    编译并执行上述代码后,将产生以下结果-
    
    Anonymous Method: 10
    Named Method: 15
    Named Method: 30
    
    
上一节:
下一节: