目标 c#高级特性
一.C#委托
概念:委托是一种引用类型,表示对方法的引用,
这个方法是具有特定返回值类型和参数的方法。
方式一:通过委托实例调用方法
方式二:使用委托把方法作为参数传递给其它方法。
委托(方式一)的使用步骤:
1.声明委托
语法:delegate 返回值类型 委托名(参数列表)
delegate string Operation(string name);
2.实例化委托
委托名 委托变量名=new 委托名(方法名称)
c#1.0: 委托名 委托变量名=new 委托名(方法)
Operation operation1 = new Operation(ChineseSayhello);
c#2.0: 委托名 委托变量名=方法
Operation operation1 = ChineseSayhello;
c#3.0: 委托名 委托变量名 = 拉蒙达表达式
Operation operation1 = x=>{ return x+":早上好";};
3.调用委托
a.无返回值
委托变量名.invoke(参数);
或:
委托变量名(参数);
b.有返回值:
string 变量名 = operation1.Invoke(参数);
string csh = operation1.Invoke(“张三”);
或:
string csh = operation1(“张三”);
注:多播委托—可通过“+”运算符将多个对象分配到一个委托实例上。
二.隐式类型和匿名类型
a.隐式类型:是编译器根据变量的初始值“推断”出的变量的类型(局部推断类型)
特点: 1.必须赋初始值,而且不能赋空值
2.变量类型不能改变,否则就会报错。
b.匿名类型:匿名类型提供了一种方便的方法,可用来将一组只读属性封装到单个对象中,而无需首先显式定义一个类型。
包括:1.匿名类:匿名类其实本质和普通定义的类一样,
只不过是由系统的编译器来完成命名
2.匿名方法:匿名方法是没有名称只有主体的方法,
它提供了一种传递代码块作为委托参数的技术。
三.扩展方法和yield
a扩展方法
概念:就是在不修改原类型的前提下,增加新方法。
1.扩展方法必须是静态方法 (static)
2.使用“this 类型”指明要扩展的类型
定义:Public static string 扩展方法名(this int …,参数)
调用:int a
a.扩展方法名(参数)
b.yield
可以将符合条件的记录查询出来,中文意思产出,返回一个集合类型Ienumberable。
四.lambda表达式
是一个通过委托传过来的匿名方法,可以结合Linq来完成相关的工作。
使用Lambda运算符“=>”,读作“goes to" (转到)
语法:形式参数=>方法体
规则:
- 参数不用类型声明,如果只有一个形参则小括号可以省略
- 如果方法体只有一条语句,则大括号,return,分号都可以省略