您好,欢迎访问三七文档
当前位置:首页 > 高等教育 > 习题/试题 > 第3章 C# 4.0新增功能
此PPT有视频学习,如果有需要,请联系QQ:13627877781元人民币/个视频,共19个视频,全部买只需10元。谢谢!!!第3章C#4.0语言特色C#4.0在语法上与以前的C#版本(2.0版本及以上)完全兼容,因此开发人员可以直接在VisualStudio2010中编写C#2.0的应用程序,但是C#4.0通过增加很多新的功能简化了C#2.0语法的复杂性,比如隐式类型声明、扩展方法、对象初始化器等等,本章的内容将详细介绍这些语法上的增强,让读者在以后开发ASP.NET应用程序时,具有坚实的基础。本章内容有:•隐式声明•自动属性•对象初始化器•扩展方法和匿名类型•局部方法•Lambda表达式•LINQ查询3.1局部变量的隐式声明在C#4.0中,可以使用隐式类型的局部变量,而不用显示的指定变量的类型。编译器将根据变量的值来进行类型的推断,并在最终的编译结果中指定正确的类型。隐式类型在C#4.0中非常有用,比如LINQ技术就大量使用了隐式声明。3.1.1如何声明隐式局部变量C#4.0中新增了一个关键字var(从C#3.0开始就出现该关键字),只需要在指定类型的位置使用var关键字,就可以完成隐式类型的声明。3.1.2在foreach循环中使用隐式声明还可以在foreach循环中使用隐式类型的声明,下面新建一个控制台应用程序来演示如何在foreach循环中使用隐式声明。新建一个控制台应用程序,命名为ImplicitlyforeachVar,在Main方法中添加如下的代码。3.1.3隐式类型变量的限制由于编译器要进行类型的推断,在声明和使用隐式类型的变量时,具有一定的限制。3.1.4隐式类型的局部数组隐式类型的数组与隐式类型变量相似,数组的元素是从数组的初始值中推断出来的。在3.1.2中,读者己经见过隐式类型数组的声明,在本小节创建一个控制台类型的项目,名称为implicitlyArrays来演示隐式类型数组的声明和使用。3.1.5隐式类型变量的作用对于一些无法确定类型的类型,使用隐式类型的变量是非常有用的。本书后面的讨论LINQ的章节中,读者将可以看到很多使用隐式类型变量的例子。3.2自动属性C#4.0的自动属性特性非常有用,当需要一些简单的、没有业务逻辑编码的属性代码时,使用自动属性特性能够帮助开发人员节省很多重复工作的时间。3.2.1理解自动属性在C#2.0中,当一个类中需要添加属性时,必须要为属性创建一个私有域来存放数据,然后添加读取和写入访问器。3.2.2访问自动属性访问自动属性与访问常规属性一样,可以读取和赋值。3.2.3自动属性的访问限制自动属性不能像标准属性一样能过省略访问器来创建只读或只写的属性。在声明自动属性明,必须同时添加get和set访问器,否则编译器会报错。3.2.4自动属性和默认值由于自动属性由编译器来生成一个私有变量域来存储数据,因此开发人员不能直接为属性指定默认值,不过编译器为自动属性自动赋了较安全的默认值,比如为int类型的属性自动赋为0,为bool类型的属性自动赋了false,为引用类型的属性自动赋值为null。3.3对象初始化器使用对象初始化器,可以在创建对象时直接向对象赋值,无需显示的调用对象的构造函数。利用这个技术,可以创建匿名类型,在3.5节将要进行详细讨论。可以显著的减少编写对象初始化语句的代码。3.3.1理解对象初始化器语法这一小节将新建一个控制台应用程序来演示对象初始化器的语法,在VS2010中新建一个控制台应用程序,命名为ObjectInitializer。3.3.2调用使用初始化语法的自定义构造函数默认情况下,对象初始化器调用默认的无参数的构造函数,但是也可以根据需要调用自定义构造函数,事实上使用对象初始化语法,可以调用任何构造函数。3.3.3内部类型的初始化也可以使用对象初始化语法来直接初始化类内部的类型。3.3.4理解集合初始化语法集合是一种在类的内部包含多种其他类型的容器,其初始化语法与内部类型的初始化语法类似。3.4扩展方法假如想给任何己经编译好的类添加新的功能,例如给.NET中的基类Object增加一个SayHello的方法,在以前,开发人员只能从Object中派生一个基类,如果拥有要扩充的类的源代码,可以更改源代码实现类似的功能。扩展方法的出现解决了必须得更改源代码或者是从Object中派生的问题,开发人员可以在一个单独的类中对己存在的类进行扩展,为其添加附加的方法,并不需要对源始代码进行改动,也不需要从己存类中进行继承,这些附加的方法称为扩展方法。3.4.1定义扩展方法要定义扩展方法,需要注要三件事情:1.扩展方法必须被定义在一个静态类中,扩展方法自身必须是一个静态方法。2.扩展方法中的首个参数必须是this,最后紧跟要扩展的类的名称。3.扩展方法可以被正确的对象实例调用,也可以使用静态类名静态的调用。3.4.2调用扩展方法扩展方法一经被定义,可以使用两种方法来进行调用,一种就是实例方法,就像在3.4.1小节中调用的那样。还可以直接使用静态类调用静态方法。3.4.3扩展方法的使用范围扩展方法由于是静态方法,具有使用上的几个要点需要注意:(1)扩展方法的名称不能与要扩展的现在类相同,否则扩展方法将不能被调用到。(2)其次是不能在扩展方法中直接访问扩展方法扩展的类的成员变量,由于扩展方法是静态方法,并不属于类成员中的标准方法,因此不能直接进行访问。(3)如果扩展方法与被扩展的类具有不同的命名空间,需要在调用扩展方法时引用定义扩展方法的命名空间。3.4.4使用扩展方法扩展接口类型还可以使用扩展方法来扩展接口的功能,下面举一个示例来演示这个功能的实现。创建一个控制台应用程序,命名为ExtensionInterfaceMethod。3.5匿名类型匿名类型,如其名字所示,是指不具有名称的类型。在一些情况下,开发人员只需要临时的使用一个类型表达一些信息,这个类只需要保存一些只读的信息,如状态信息等,并不需要关联任何方法,事件等,这时候可以不用显示的去定义一个类,可以考虑使用匿名类型。3.5.1理解匿名类型匿名类型的创建非常简单,其实就是本章前面所讨论的两种技术的组合,一种是隐式声明,一种是对象初始化器。3.5.2匿名类型的内部呈现匿名类型续承自System.object基类,该类是.NETFramework类库中所有其他类的基类,因此可以直接访问object中的几个方法如GetType、ToString和GetHashCode来获取匿名类型的内部信息。。3.5.3匿名类型的相等语法本小节来讨论匿名类型的相等比较,假定有两个匿名类型,可以通过调用重载的Equals方法来进行相等值的比较。3.6局部方法当C#2.0发布时,笔者对其中的局部类实在是记忆深刻,局部类使开发人员将一个类的实现定义到多个代码文件中,只需要使用关键字Partial,在多个文件中使用相同的类名。编译时,编译器将生成一个完整的类,局部类的使用也非常广泛,比如在类型化数据集中,就需要大量使用局部类来完成自定义的功能。在C#4.0中,微软又再次推出了一个局部方法技术,使开发人员可以在一个类文件中定义方法的声明,而在另外一个类文件中定义方法的实现。3.6.1理解局部方法局部方法技术与局部类技术在团队开发中非常有用,可以让一个开发人员定义方法的签名,而让另外一个开发人员定义方法的实现,不过局部方法本身具有几个局限性:•局部方法仅用于局部类中。•局部方法的返回值必须是void。•局部方法可以是静态的或者是实例化的。•局部方法可以有参数,可以包含参数修饰符如this、ref或Params,但是不包括out修饰符。•局部方法隐式的访问级别为private,因此不能为虚方法。3.6.2使用局部方法在Main方法中,实例化一个Book类,并调用BuyBook方法来购买书籍,由于BuyBook会调用局部方法BookInStock来检查库存,并根据库存结果来显示结果到控制台窗口中。3.7Lambda表达式在C#2.0中,引入了一个匿名方法的特性,使开发人员可以直接为委托添加方法语句块,而不需要显示的创建一个单独的方法。在C#4.0中,提供了一个更加简法的方法来处理.NET中的委托类型,也即Lambda表达式。3.7.1理解Lambda表达式为了更好的讲述Lambda表达式以便于理解,在这节同样的先创建一个控制台应用程序,命名为LambdaDemo。在本示例中,首先举一个匿名方法的例子,然后来看看Lambda表达式是如何声明并简化匿名方法的代码的。3.7.2剖析Lambda表达式通过完成上一个例子,相信读者对Lambda表达式有了一个基本的了解,一个Lambda的组成通常如下:•首先是一个参数或参数列表,也就是输入变量,在上一个示例中由于需要为委托传递一个字符串类型的变量,因此左侧的是str变量。•接下来是=符号,称作Lambda运算符,MSDN中将这个符号念作“goesto”。•最后是Lambda语句块,可以是单条语句也可以是多个语句的语句块。3.7.3在Lambda中使用多语句块在上一个示例的Lambda表达式中,只处理了一行语句,也可以为Lambda表达式添加多行语句。3.7.4多参数的Lambda表达式Lambda表达式中的参数部分同样也非常灵活,即可以添加多个参数,也可以不添加任何参数。3.8LINQ简介LINQ又称为语言集成查询,在本章中,笔者只打算简要的讨论了一下什么是LINQ查询,在本书第17章,将使用一整章的编幅来详细的介绍LINQ技术。语言集成查询让开发人员可以使用.NET程序语言如C#,去查询数据源,比如内存中的集合对象、数据库中的表、XML、DataSet等等,开发人员不用去分门别类的学习众多的查询语法就可以轻构的查询异构数据源。3.8.1什么是LINQLINQ的目标是让开发人员使用熟悉的语言如C#、VB.NET访问数据库,而不用去管底层数据库的细节。比如底层到底是ORACLE或者是SQLServer,这些都不用在乎。LINQ提供了丰富的指令来实现复杂的查询,比如数据聚合,联合查询,排序等等。LINQ除了能查询数据之外,还可以执行添加、修改、删除等操作。3.8.2LINQ示例下面使用VS2010开发一个简单的LINQtoSQL应用程序,步骤如下所示。3.9小结本章讨论了在C#4.0语言的许多增强的功能,首先介绍了隐式类型声明,由编译器根据上下文进行类型推断,接下来讨论了使用自动属性功能简化编写重复性的属性代码。对象初始化器可以简化开发人员的赋值代码,接下来讨论了如何对一个现有类进行扩展的扩展方法。匿名类型是一种隐式类型,通过使用隐式类型声明和对象初始化器,编译器将自动生成隐式的类型。局部方法简化了团队开发的复杂性,Lambda表达式大大优化匿名方法的代码,最后简单的讨论了LINQ技术。3.10常见面试题3.10.1你用过自动属性嘛?如何使用?常设计类的开发人员一定会先记住自动属性这个特色,因为它可以节省设计类的时间,并且使代码更直观更简洁。3.10.2描述下LINQ的作用LINQ的主要作用如下:•LINQ可以对所有类型数据的统一编程模型,它使开发人员不用关心数据源是什么,而使用一致的模型查询和使用数据。•LINQ不同于SQL查询,它是将SQL查询嵌入到代码中的另一种工具,能够做的事情远远比嵌入的SQL查询要多很多。•LINQ比“统一的编程模型”更容易使用,同时也远不止是数据模型的另外一套规则。•LINQ是一套简化和统一数据访问的实现方法。它不是要求使用一种特定的架构,它使一些现有访问数据架构的实现更加便利。
本文标题:第3章 C# 4.0新增功能
链接地址:https://www.777doc.com/doc-5533476 .html