1,匿名方法
C#为委托提供一种机制,可以为委托定义匿名方法,匿名方法没有名称,编译器会定指定一个名称
匿名方法中不能使用跳转语句跳转到该匿名方法的外部,也不能跳转到该方法的内部。
也不能在匿名方法外部使用的ref和out参数
- //用匿名方法定义委托
- class Program
- {
- delegate string MyDelagate(string val);
- static void Main(string[] args)
- {
- string str1 = " 匿名方法外部 ";
- //中括号部分定义来了一个方法,没有名称,编译器会定指定一个名称
- MyDelagate my = delegate(string param)
- {
- string str2 = " 匿名方法内部 ";
- return param + str1 + str2;
- };
- //调用委托的匿名方法
- Console.WriteLine(my(" 参数 "));
- //从结果可以看到,匿名方法同样达到了为委托定义方法的效果
- Console.Read();
- }
- }
2,匿名方法的【λ(拉姆达)表达式】方式定义
C#3.0之后匿名方法可以使用λ表达式来进行定义
无论是拉姆达(lambda)表达式(事实上应该叫匿名函数)或是匿名类,都能归属到一种叫闭包的东西上面。
λ运算符 =>
左边是参数,使用括号表达 (string param),可以是 (param)这样不定义类型,编译器会推断出来,只有一个参数的时候可以不使用括号
右边是实现代码,使用花括号,如果代码只有一行,则不使用花括号和return关键字也可以,编译器会为我们添加
这是λ表达式的简单实现
string str1 = " 匿名方法外部 ";
string str2 = " 匿名方法内部 ";
MyDelagate my = param => param + str1 + str2;
Console.WriteLine(my(" 参数 "));