C# - 匿名方法
顾名思义,匿名方法是没有名称的方法。C# 中的匿名方法可以使用 delegate 关键字定义,并可以赋值给委托类型的变量。
示例:匿名方法
public delegate void Print(int value);
static void Main(string[] args)
{
Print print = delegate(int val) {
Console.WriteLine("Inside Anonymous method. Value: {0}", val);
};
print(100);
}
输出
在匿名方法内部。值:100匿名方法可以访问在外部函数中定义的变量。
示例:匿名方法
public delegate void Print(int value);
static void Main(string[] args)
{
int i = 10;
Print prnt = delegate(int val) {
val += i;
Console.WriteLine("Anonymous method: {0}", val);
};
prnt(100);
}
输出
匿名方法:110匿名方法也可以作为参数传递给接受委托的方法。
在以下示例中,PrintHelperMethod() 将 Print 委托的第一个参数作为参数。
示例:作为参数的匿名方法
public delegate void Print(int value);
class Program
{
public static void PrintHelperMethod(Print printDel,int val)
{
val += 10;
printDel(val);
}
static void Main(string[] args)
{
PrintHelperMethod(delegate(int val) { Console.WriteLine("Anonymous method: {0}", val); }, 100);
}
}
输出
匿名方法:110匿名方法可以用作事件处理程序。
示例:作为事件处理程序的匿名方法
saveButton.Click += delegate(Object o, EventArgs e)
{
System.Windows.Forms.MessageBox.Show("Save Successfully!");
};
C# 3.0 引入了 lambda 表达式,其功能也类似于匿名方法。
匿名方法的局限性
- 它不能包含跳转语句,如 goto、break 或 continue。
- 它不能访问外部方法的 ref 或 out 参数。
- 它不能拥有或访问不安全代码。
- 它不能用在 is 运算符的左侧。
要记住的要点
- 匿名方法可以使用 delegate 关键字定义。
- 匿名方法必须赋值给一个委托。
- 匿名方法可以访问外部变量或函数。
- 匿名方法可以作为参数传递。
- 匿名方法可以用作事件处理程序。