顾名思义,匿名方法是没有名称的方法。可以使用委托(delegate)关键字定义C#中的匿名方法,并且可以将其分配给委托(delegate)类型的变量。
在匿名方法中您不需要指定返回类型,它是从方法主体内的 return 语句推断的。
示例:匿名方法
public delegate void Print(int value);
static void Main(string[] args)
{
Print print = delegate(int val) {
Console.WriteLine("匿名方法内部。值: {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("匿名方法: {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("匿名方法: {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 关键字定义匿名方法
匿名方法必须分配给委托。
匿名方法可以访问外部变量或函数。
匿名方法可以作为参数传递。
匿名方法可用作事件处理程序。