C#学习笔记(三)—–C#高级特性:匿名方法
2017-05-22 12:08
204 查看
匿名方法
匿名方法是C#2.0引入的一个功能,并通过C#3.0的lambda得到了大大的扩展。匿名方法类似于lambda表达式,但是没有lambda表达式的几个功能:①隐式的类型确定的参数
②表达式语句(匿名方法必须是语句块的形式)
③被指定为表达式树时,转换为一个表达式树的能力
写匿名方法的形式是delegate关键字后面跟一个参数列表以及一个语句块:
delegate int Transformer (int i); Transformer sqr = delegate (int x) {return x * x;}; Console.WriteLine (sqr(3)); // 9
他在语义上与下列的lambda表达式的声明是一样的
Transformer sqr = (int x) => {return x * x;};
匿名方法捕获外部变量时的行为与lambda表达式是一样的。
完全省略参数生命是匿名方法独有的特性。即使委托需要这样的参数声明。这对声明一个带有空的处理方法的事件是非常有用的:
public event EventHandler Clicked = delegate { };//这段代码可以看出,EventHandler本来是需要object和eventargs参数的,但是delegate{};可以这样写,这是匿名方法唯一的不同于lambda表达式的地方。
这样,在引发事件时就可以避免检查null值。下面的写法也是合法的:
// 省略了参数。 Clicked += delegate { Console.WriteLine ("clicked"); };
相关文章推荐
- C#学习笔记(三)—–C#高级特性:扩展方法
- C#学习笔记(三)—–C#高级特性:匿名类型
- 委托是什么?匿名方法是什么?在C# 3.0中,Lambda表达式是什么?扩展方法是什么?LINQ是什么?您觉得C# 3.0中还有哪些重要的特性,它们带来了什么优势?BCL中哪些类库和这些特性有关?您平时最常用哪些
- paip。java 高级特性 类默认方法,匿名方法+多方法连续调用, 常量类型
- C#学习笔记(三)—–C#高级特性:Lambda表达式
- C#学习笔记(三)—–C#高级特性:可空值类型
- 为LINQ服务的C#新特性总结篇---扩展方法,匿名委托,lambda表达式,Action委托,Func委托,Linq中的order by,top和sum函数
- Unity使用C#高级特性扩展方法
- C#学习笔记(三)—–C#高级特性:try语句和异常
- C#学习笔记(三)—–C#高级特性中的委托与事件(上)
- 不能不说的C#特性-匿名方法和Lambda表达式
- 一个例子帮你搞懂C#语言高级特性系列(04) --- 匿名类型
- paip。java 高级特性 类默认方法,匿名方法+多方法连续调用, 常量类型
- C#学习笔记(三)—–C#高级特性:枚举类型和迭代
- 不能不说的C#特性-匿名方法和Lambda表达式
- C#特性 学习笔记(对象初始化器 匿名类型 扩展方法)
- 【整理】C#2.0特性之匿名方法和迭代器
- 一个例子帮你搞懂C#语言高级特性系列(03) --- 方法扩展
- C#学习笔记(三)—–C#高级特性:运算符重载
- C#学习笔记(三)—–C#高级特性:实现迭代器的捷径