C#高级特性

C#高级特性

1、C#委托

1.1.1)委托是一种引用类型,表示对具有特定参数列表(形参)和返回类型的方法的引用

1.1.2)可以通过委托的实例调用方法。也可以使用委托将方法作为参数传递给其他方法

1.1.3)委托的使用可以大大的提高程序的扩展性

1.2.1)委托的声明决定了可由该委托引用的方法。委托可指向一个与其具有相同签名的方法。

Public delegate <return type> <delegate-name> <parameter list>;
Public delegate string TranslationDelegate (string s);
能被委托调用的方法需要满足的条件:
1、方法返回值类型必须和委托定义的类型一致
2、方法的参数类型、个数、顺序必须和委托定义的一致
3、大部分被委托调用的方法都是static静态方法

1.2.2)多播委托: 所有的委托实例都具有多播的能力,一个委托的实例可以引用多个目标方法

i)委托一次调用多个方法的方法:+=
ii)“-”运算符可以从多播委托中删除组件委托
SomeMethod d = Method1;
d+=Method2;
或者 d = d+ Method2;
//调用d 就会调用Method1和Method2
//委托d的调用顺序和它的定义顺序是一致的,也就是说先执行Method1 再执行Method2

2、隐式类型与匿名类型

匿名方法:没有名字的方法,是配合委托来用的。委托的对象可以调用委托引用的方法。提供了代码块作为委托参数的技术。匿名方法没有名字,只有主体。*匿名方法不需要指定返回类型,会从方法体的return中自行推断。*匿名方法一般只用一次,随写随用。前提:创建匿名方法,要将它放在委托里。
语法结构:
i)、先定义并实例化一个委托
public delegate int Dele(int x, int y);
Dele d;
ii)、定义匿名方法的格式
delegate(形参...)
{
	方法体;
	return...;
}
/*
1.形参可以有多个
2.匿名方法的返回值由return的值自行推断
*/
d = delegate (int x, int y)
{
    //匿名方法内容写在{}里==》代码块
    return (x + y) * 2;
};
	int res =  d(4, 5);
	Console.WriteLine(res);
匿名类型:
var a = new[] {0,1,2};
var b= new {name="张三", age=20, isBoy = true};
//new {name="张三", age=20, isBoy = true}创建一个匿名类对象
隐式类型:
i).var : 声明局部变量一定要赋初始值
ii).隐式型数组
//int[]
var a = new[] {1,2,3};
****隐式类型不能定义多维数组。
var a = int[2][3]{...};
iii).var关键字只能用在下面几种地方:
a.声明局部变量
b.在for语句中
c.foreach中
d.在using中

3、扩展方法与yield关键字

扩展方法

要求:扩展方法的类必须是静态类(扩展方法必要要放到一个单独的类中);扩展方法必须也是静态的;扩展方法的第一个参数必须是要扩展的那个类;第一个参数前边还需要加一个this关键字。扩展方法和原来类里的属性和方法没有任何关系
总结:

i)可以像类中添加新方法,不需要使用继承来创建新类,也不需要来修改原来的类。
ii)如果扩展方法与类中的方法签名相同,则扩展方法不会被调用。
iii)扩展方法不能访问被扩展类的私有成员
iiii)扩展方法只能用实例来调用
iiiii)只有引入了扩展方法所在的命名空间,扩展方法才可以使用

yield

yield一般和Enumerable(枚举数)配合使用,提供给集合的数据进行迭代。
集合迭代:对于集合,逐一取出元素并遍历之。

yield关键字使用

yield关键字的作用是将集合中的元素立即返回
1.返回元素用 yield return;(一次返回一个)
2.结束返回用yield break;(终止迭代)当产生集合达到某个条件的时候使用yield break,以终止继续创建集合。

4、Lambda表达式

Lambda表达式实际上就是一个匿名函数,是简化了的匿名方法。
表达形式: (参数列表)=>表达式或者代码块/运算和判断 =>读作goes to去到
Lambda表达式分为两种类型
1)语句Lambda
2)表达式Lambda
public delegate int Dele(int x,int y);
Dele d;
d=(x,y)=>x*y;
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值