《C Sharp 3.0从基础到项目实战》课件第13章 C# 3.0中新增功能_第1页
《C Sharp 3.0从基础到项目实战》课件第13章 C# 3.0中新增功能_第2页
《C Sharp 3.0从基础到项目实战》课件第13章 C# 3.0中新增功能_第3页
《C Sharp 3.0从基础到项目实战》课件第13章 C# 3.0中新增功能_第4页
《C Sharp 3.0从基础到项目实战》课件第13章 C# 3.0中新增功能_第5页
已阅读5页,还剩11页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第13章C#3.0中新增功能13.1隐式类型的局部变量和数组13.2对象和集合初始值设定项13.3匿名类型13.4扩展方法13.5Lambda表达式13.6小结13.1隐式类型的局部变量和数组13.1.1隐式类型的局部变量在C#3.0中,可以使用var关键字声明变量,变量的类型由编译器智能推断。编译器推断的依据即初始化语句右边的表达式,例如下列代码。vara=100;编译器会根据后面的表达式推断出a的类型为int,即编译器在内部会实现如下相同的定义。inta=100;推断的类型可以是内置类型、匿名类型或用户自定义类型。下列代码演示隐式类型的应用。varmyBool=false; //编译器推断为布尔型(bool)varx=123.456; //编译器推断为小数型(decimal)vary=2.7E+23; //编译器推断为双精度(double)varname=“Jane”; //编译器推断为字符串(string)13.1.1隐式类型的局部变量注意:在使用var声明隐式变量时,必须同时初始化变量,并且不能将变量初始为Null、方法组或匿名函数。当声明的变量被推断出以后,变量的类型就不能改变了,例如下列代码。vara=100;a=100.10;此时就会出现编译错误:无法将类型“double”隐式转换为“int”。13.1.1隐式类型的局部变量不能将var用于类范围领域,即不能用作类的字段。本节题目“隐式类型的局部变量”也提示了隐式类型只能用作局部变量。由var声明的变量不能用在初始化表达式中,会造成编译错误,例如下列代码。

vara=(a=100);不能在一个语句中初始化多个隐式类型变量,系统会出现错误提示“隐式类型的局部变量不能有多个声明符”,例如下列代码。

vara=100,b=200;如果范围中有一个名为var的类型,则var将解析为该类型名称,而不是作为隐式类型局部变量的一部分,例如下列代码。

Intvar=100;13.1.2隐式类型的数组隐式类型数组的原理与隐式类型局部变量的原理相同,也是通过从数组的初始值中推断数组类型,例如下列代码。vara=new[]{1,2,3};vary=new[]{"Hello",null,"world"};编译器会推断出a和y的数据类型,a是int[]型数组,b是string[]型数组。13.1.2隐式类型的数组注意:隐式类型是不需要加“[]”的,即不需要var[]a=new{1,2,3}。对于交错数组,就如同使用一维数组那样使用new[]初始化。隐式类型的数组不支持多维数组。13.2对象和集合初始值设定项在C#中,使用对象初始值设定项,可以在创建对象时向对象的任何可访问字段或属性分配值,而无需显式调用构造函数,例如可以定义一个Person类。classPerson{publicstringLastName{set;get;};publicstringFristName{set;get;}publicintAge{set;get;}}可以使用它的公共字段或属性初始化一个person类的对象Doctor,代码如下。Persondoctor=newPerson(){FristName="Jack",Lastname="lee",Age=49};当然也可以不提供全面的字段和属性初始化一个对象,代码如下。Persondoctor=newPerson(){FristName="Jack",Lastname="lee"};13.2对象和集合初始值设定项下列代码采用了自动实现的属性。classPerson1{privatestringname;publicstringName{get{returnname;}set{name=value;}

……}可简化成:publicstringName{get;set;}13.2对象和集合初始值设定项使用集合初始值设定项,可以在初始化一个实现了IEnumerable的集合类时指定一个或多个元素初始值设定项。示例:List<int>li=newList<int>{0,1,2,3,4,5,6,7,8,9};List<int>li1=newList<int>{1,2,4/5,7*2/5};List<Person>p=newList<Person>{newPerson(){LastName="Smith",FirstName="Tom",Age=8},newPerson(){LastName="Bush",FirstName="Mary",Age=2},};13.3匿名类型匿名类型提供了一种便捷的方法,能够将一组只读属性封装到单个对象中,而无需首先显式定义一个类型。其实质就是该对象的类型名由编译器生成,并且不在代码中使用。示例:vardoctor=new{FristName="Jack",Lastname="lee",Age=48};13.3匿名类型匿名类型的优势在于,可以将一组只读属性封装在单个对象中,而不需要首先定义类。其中,类的名称将由编译器内部生成,类在源代码中既不会显示,也不能使用。匿名类型是由一个或者多个公共属性组成的类,它不可以包含任何其他类成员,例如方法、事件等。最常见的操作是使用其他类型的一些属性初始化匿名类型。13.4扩展方法C#中引入了扩展方法,它允许在不了解现有的类源代码的情况下,向其中添加方法。步骤:必须添加一个静态类,用来包含要添加的扩展方法。要添加的扩展方法必须为静态方法。方法参数列表中第一个参数必须以this开始,然后是要扩展的类型名称和参数名。13.4扩展方法示例:staticclassPersonExtension{publicstaticvoidSpeak(thisPersonperson,stringwords){Console.WriteLine(words);}}13.5Lambda表达式C#3.0为匿名方法提供了一个新的语法,即Lambda表达式,又称为λ表达式,它可以包含表达式和语句,并且可用于创建委托或LINQ表达式。通过在表达式运算符“=>”(读作goesto)左边输入参数(如果存在参数),表达式运算符右边输入表达式或者语句块,可以快速而又简洁地构建匿名方法。Lambda表达式主要应用于委托和LINQ。13.5Lambda表达式示例:下列代码是一个Lambda表达式应用于委托的简单示例。delegateintdel(inti);delmyDelegate=x=>x*x;intj=myDelegate(5);13.6小结本章主要介绍了C#中新增加的功能。这些功能极大地丰富了C#语言特性,使其更加智能化,可以减轻开发人员的编码负担,使开发人员能够更加灵活地编写程序。这些新功能的核心还是LINQ,无论是隐

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论