C#3.0新特性及概念

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

C#3.0新特性
本章学习内容
1.C#3.0的自动属性
2.C#
3.0的对象初始化值设定
3.C#3.0的集合初始值设定
4.C#3.0的扩展方法
5.C#3.0中的推断类型与匿名类
本章学习目标
1.掌握C#3.0新的语法特征
2.理解各项新语法特征对编码的影响
主要内容
C#各版本开发与执行环境的历史
C#3.0对应的是.NET Framework是3.5
C#2.0对应的是.NET Framework是2.0
从2.0到3.x的特性
一般而言,软件主版本号的变化意味对软件的重大修改.
C#3.0的新特性
(1).自动属性
例题:public int Id{ get; set;}
Public int Id{private get;set;}-------只写
Public int Id{ get; private set;} ----只读
(2).对象初始化
Student stu = new Student(){Id = 1,name="小黑",age = 12};
(3).集合初始化值设定
List<int> arr = new List<int>(){1,3,24,56};
扩展方法
(1)使用继承方式扩展类的功能会受到一些限制
a)必须获知扩展类的名称和方法.
b)有些类本身被设计为封闭的,不可以被继承.
(2)命名空间对扩展方法很重要,只有引入扩展方法所在的命名
空间后,扩展方法才可以使用.
(3)扩展方法必须符合一下要求:
a)必须是定义在静态类中的静态方法
b)第一个参数的类型是扩展方法的类型
c)第一个参数需要添加this关键字以标识其为扩展方法
(4)扩展方法只能使用实例类调用,不能像普通的静态方法一样
使用类名调用.
(5)如果扩展方法与类中的方法有相同的签名,则扩展方法不会
被调用.
推断类型与匿名类
(1)使用var声明的变量必须同时赋予初始值
(2)使用var声明推断类型时,只能应用于方法内部的局部变量
中,不可以用于类内部变量声明中.
(3)错去写法:var i; i =5;
(4)匿名类型的使用也有局限性,它只能应用于声明匿名类型的
方法内部,无法将匿名类型传递到方法外部.
本章总结
1.自动属性采用简化的语法声明属性
2.对象初始化值特性支持在创建对象时同时对属性惊醒初始化,
为取代带参数的构造函数提供了更灵活的语法
3.集合初始化值特性支持在创建集合时同时添加元素至集合内部,为简化集合元素初始化提供了更灵活的语法。

4.扩展方法提供了除修改和继承外扩展现有类的另一种实现途径
5.推断类型提供了简化的声明变量的语法以及访问匿名类的唯一
方式
6.匿名类为传递一组只读属性提供了更简洁的语法
7.所有C#3.0的新特性都是语法上变更,是语法更简单灵活,所
有省略的工作由编译器自动完成。

由编译器处理后的代码与C#2.0是完全一致,所以C#3.0与C#2.0的CLR完全一致。

委托与事件
本章学习内容
1.委托的概念与使用
2.事件的概念与使用
3.匿名方法
mbda表达式
本章学习目标
1.掌握委托和事件的使用
2.掌握匿名方法的使用
3.掌握Lambda表达式的使用
本章主要内容
为什么需要委托
(1)传递字符串参数时,需要将参数声明为string类型;传递方法时需要将参数声明为委托类型。

因此,将一个方法作为参数传递给另一个方法时,就需要使用委托。

理解委托
(1)当一个类型需要处理一件事情但没有处理的方法时,需要将事情交给第三方类进行处理,此时需要使用委托。

(2)委托于抽象类的区别:
在抽象类的应用中,两个类必须是派生关系;
在委托中,两个类可以没有任何关系。

(3)可以将委托当做方法的类型声明
(4)声明委托时需要明确声明其接收的参数列表和返回值类型,以限制委托类型的值,保证调用时不会报错。

委托的使用
(1)C#中委托的关键字是delegate,其使用与class非常相似。

(2)声明语法
[public /protected/private] delegate returnType
delegateName(paramtype param1.........)
(3)委托实例化
A)委托在使用前必须实例化,为委托分配的方法可以是
方法或静态方法
B)委托实例化的过程可以理解将一个方法赋值为委托,
此时委托的值等同于该方法。

类比class的使用,该步骤等
同于创建类的实例。

委托的多路广播
可以为一个委托分配多个方法,这就是委托的多路广播功能。

在多路广播委托中,当使用委托调用方法时,多个方法会按照分配时的顺序依次调用,共享参数。

返回结果为最后一次
调用方法时的返回结果。

如果方法中有out或ref参数,先调用的方法对此类参数值的改变会影响到后调用的方法中该参数的值。

注意:
如果多路广播中所分配的实例方法来自不同的实例,将被视为不同的方法。

从多路广播中移除某个方法时需要注意该特
性。

委托是由编译器自动生成的类,它继承自
System.MulticastDelegate类,以声明的委托名为类名。

事件的概述
事件是一个特殊的委托,封装了对委托的范访问。

事件的声明
(1)语法:
Public event EventNameEventHandler EventName;
(2)用于事件的委托遵循以下约定
a)没有返回值
b)接收两个参数:第一个参数为Object类型,用于指定
引发事件的对象;第二个参数为EventArgs或其之类,
用于传递事件所需要的数据
(3)为了在事件发生时事件接收方能够进行相应的处理,必须在事件接收方将处理方法添加到事件封装的委托中,该过
程称为注册事件处理方法。

(4)当程序再不需要处理某个事件了,可以将处理方法从事件封装的委托中移除,该过程被称为注销事件处理方法。

(5)当注销的事件处理方法为实例方法时,请务必确认注销的方法与注册的方法属于同一个实例的方法。

(6)要触发事件必须在事件所在的类中编写一个触发事件的方法。

其命名习惯一般为“On+事件名”
(7)事件与委托用法基本上相同,除了以下限制:
a)除了在事件所在类内部时之外,只能出现在“+=”、
“-=”操作符的左边。

b)不能在事件所在的类外直接访问。

(8)事件不是方法,也不是属性
匿名方法
(1)匿名方法提供了新的使用委托的方式,它允许以内联的方式定义一个由委托调用的没有名称的方法
(2)语法:
Delegate(input paraments){statement}
如果匿名方法声明时不需要使用参数,则可以省略参数
列表,不需要为匿名方法指定返回值类型,编译器可以
根据委托的声明推断返回值的类型。

匿名方法的声明以内联的方式书写,可以作为表达式的
一部分,直接将匿名方法添加到委托中。

(3)使用匿名方法与普通方法为委托分配方法的区别包括3个方面:
a)不需要在声明委托。

b)不需要在为方法命名。

c)使用匿名方法可以减少书写没有必要的代码。

(4)如果没有在匿名方法中引用类的实例成员,生成的匿名方法将默认为静态方法;如果在匿名方法中引用了任何类的
实例成员,则会生成为实例方法。

(5)使用委托执行方法时需要注意方法真正执行的时间。

(6)系统对变量的封装是按照作用域来划分的,同一作用域生成一个类,多个变量被封装在同一类中。

不同作用域生成
不同的类。

Lambda表达式
(1)语法:
(input parameter)=>{statement}
a)使用运算符"=>" 读作“goes to”,该运算符具有与赋
值运算符(=)相同的优先级,并且是右结合运算符。

运算符
左侧为输入参数列表,右侧为表达式或语句块
b)Lambda表达式是匿名方法的一种语法,二者语法具有
一一对应的关系,goes to 运算符与delegate关键字的区别在
于其位置不一致。

与匿名类型相同,Lambda表达式创建时必
须分配给某个委托类型。

(2)Lambda表达式与匿名类型的区别在于语法上规定的可省略之处不同。

Lambda表达式参数列表中类型可以省略,当且仅当输入的参数为一个时,可以省略参数列表的括号;匿名方法当方法没有参数时可以省略参数列表。

(3)Lambda表达式和匿名方法都可以省略返回值类型,并且自动根据委托类型获取返回值类型。

(4)例题:
Public delegate int Operation(int a ,int b);
Static void Main(string[] args)
{
Operation op1 = (int x,int y)=>x=x+y;
Operation op2 = (int x, int y)=>x-y;
Operation op3 = (int x ,int y)=>{return x*y};
}
本章总结
1.将方法作为参数传递给另一个方法时需要使用委托。

2.委托可以理解为方法的类型,但实质是可以保存对方法的引用类型
3.委托可以分配给多个方法,为一个委托分配多个方法称为多路广播。

多个方法会按照分配时的顺序依次调用,共享参数。

返回结果为最后一次调用方法时的返回结果。

若方法中有out和ref参数,先调用的方法对此类参数值的改变将影响到调用的方法中该参数的值。

4.事件时对象发送的消息,以发信号的方式通知操作的发发生,引发事件的对象称为事件发送方,捕获事件并对其作响应的对象称为事件的接收方。

事件的编程实现是对委托进行了封装的类。

5.事件的使用包括3个过程:声明事件、为事件注册处理程序、触发事件。

6.事件的使用有严格的命名约定,包括用于事件的委托的方法签名约定和命名约定、触发事件的方法命名约定。

编程过程中需要严格遵循命名约定。

7.匿名方法提供了新的使用委托的方式,允许以内联的方式定义一个由委托调用的没有名称的方法。

mbda表达式是C#3.0的一种新语法,为编写匿名方法提供了更简明的函数式语法。

相关文档
最新文档