一、定义
在c#中委托是用于引用与其具有相同标签的方法。
可以使用委托对象调用可由委托引用的方法。
匿名方法(Anonymous methods) 提供了一种传递代码块作为委托参数的技术。匿名方法是没有名称只有主体的方法。
在匿名方法中您不需要指定返回类型,它是从方法主体内的 return 语句推断的。
示例:
public delegate void Print(int value); static void Main(string[] args) { Print print = delegate(int val) { Console.WriteLine("匿名方法内部。值: {0}", val); }; print(100); }
在定义和使用委托时我们可能有必要定义一个具有相同标签的私有方法,如果这个方法只使用一次,就很满意必要单独定义,所以就引入匿名方法,
它没有方法签名,只有方法体,使得我们的代码更加简洁直观。
二、匿名方法使用
1.匿名方法访问外部函数中定义的变量。
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); }
2.匿名方法传递给接受委托作为参数的方法。
在下面的示例中,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); } }
3.匿名方法作为事件处理程序
saveButton.Click += delegate(Object o, EventArgs e) { System.Windows.Forms.MessageBox.Show("Save Successfully!"); };
4.匿名方法的局限性
-
它不能包含跳转语句,如goto,break或continue。
-
它不能访问外部方法的ref 或 out参数。
-
它不能拥有或访问不安全的代码。
-
不能在is运算符的左侧使用。
5.注意事项
-
可以使用 delegate 关键字定义匿名方法
-
匿名方法必须分配给委托。
-
匿名方法可以访问外部变量或函数。
-
匿名方法可以作为参数传递。
-
匿名方法可用作事件处理程序。