C# 匿名方法

顾名思义,匿名方法是没有名称的方法。可以使用委托(delegate)关键字定义C#中的匿名方法,并且可以将其分配给委托(delegate)类型的变量。

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

publicdelegatevoidPrint(intvalue);staticvoidMain(string[]args){Printprint=delegate(intval){Console.WriteLine("匿名方法内部。值:{0}",val);};print(100);}
输出:
匿名方法内部。值:100

匿名方法访问外部函数定义的变量

匿名方法可以访问外部函数中定义的变量。

publicdelegatevoidPrint(intvalue);staticvoidMain(string[]args){inti=10;Printprnt=delegate(intval){val+=i;Console.WriteLine("匿名方法:{0}",val);};prnt(100);}
输出:
匿名方法:110

匿名方法作为参数

也可以将匿名方法传递给接受委托作为参数的方法。

在下面的示例中,PrintHelperMethod()采用Print委托的第一个参数:

publicdelegatevoidPrint(intvalue);classProgram{publicstaticvoidPrintHelperMethod(PrintprintDel,intval){val+=10;printDel(val);}staticvoidMain(string[]args){PrintHelperMethod(delegate(intval){Console.WriteLine("匿名方法:{0}",val);},100);}}
输出:
匿名方法:110

匿名方法可用作事件处理程序

saveButton.Click+=delegate(Objecto,EventArgse){System.Windows.Forms.MessageBox.Show("SaveSuccessfully!");};

C#3.0引入了 lambda 表达式,该表达式也像匿名方法一样工作。

匿名方法的局限性

  • 它不能包含跳转语句,如goto,break或continue。

  • 它不能访问外部方法的ref 或 out参数。

  • 它不能拥有或访问不安全的代码。

  • 不能在is运算符的左侧使用。

要记住的要点

  1. 可以使用 delegate 关键字定义匿名方法

  2. 匿名方法必须分配给委托。

  3. 匿名方法可以访问外部变量或函数。

  4. 匿名方法可以作为参数传递。

  5. 匿名方法可用作事件处理程序。

编辑于2024-05-20 15:29