第3章 C# 4.0新增功能

上传人:我*** 文档编号:135358481 上传时间:2020-06-15 格式:PPT 页数:41 大小:52KB
返回 下载 相关 举报
第3章 C# 4.0新增功能_第1页
第1页 / 共41页
第3章 C# 4.0新增功能_第2页
第2页 / 共41页
第3章 C# 4.0新增功能_第3页
第3页 / 共41页
第3章 C# 4.0新增功能_第4页
第4页 / 共41页
第3章 C# 4.0新增功能_第5页
第5页 / 共41页
点击查看更多>>
资源描述

《第3章 C# 4.0新增功能》由会员分享,可在线阅读,更多相关《第3章 C# 4.0新增功能(41页珍藏版)》请在金锄头文库上搜索。

1、此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

2、 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循环中使用隐式声明 新建一个控制台应用程序 命名

3、为ImplicitlyforeachVar 在Main方法中添加如下的代码 3 1 3隐式类型变量的限制 由于编译器要进行类型的推断 在声明和使用隐式类型的变量时 具有一定的限制 3 1 4隐式类型的局部数组 隐式类型的数组与隐式类型变量相似 数组的元素是从数组的初始值中推断出来的 在3 1 2中 读者己经见过隐式类型数组的声明 在本小节创建一个控制台类型的项目 名称为implicitlyArrays来演示隐式类型数组的声明和使用 3 1 5隐式类型变量的作用 对于一些无法确定类型的类型 使用隐式类型的变量是非常有用的 本书后面的讨论LINQ的章节中 读者将可以看到很多使用隐式类型变量的例子

4、3 2自动属性 C 4 0的自动属性特性非常有用 当需要一些简单的 没有业务逻辑编码的属性代码时 使用自动属性特性能够帮助开发人员节省很多重复工作的时间 3 2 1理解自动属性 在C 2 0中 当一个类中需要添加属性时 必须要为属性创建一个私有域来存放数据 然后添加读取和写入访问器 3 2 2访问自动属性 访问自动属性与访问常规属性一样 可以读取和赋值 3 2 3自动属性的访问限制 自动属性不能像标准属性一样能过省略访问器来创建只读或只写的属性 在声明自动属性明 必须同时添加get和set访问器 否则编译器会报错 3 2 4自动属性和默认值 由于自动属性由编译器来生成一个私有变量域来存储数据

5、因此开发人员不能直接为属性指定默认值 不过编译器为自动属性自动赋了较安全的默认值 比如为int类型的属性自动赋为0 为bool类型的属性自动赋了false 为引用类型的属性自动赋值为null 3 3对象初始化器 使用对象初始化器 可以在创建对象时直接向对象赋值 无需显示的调用对象的构造函数 利用这个技术 可以创建匿名类型 在3 5节将要进行详细讨论 可以显著的减少编写对象初始化语句的代码 3 3 1理解对象初始化器语法 这一小节将新建一个控制台应用程序来演示对象初始化器的语法 在VS2010中新建一个控制台应用程序 命名为ObjectInitializer 3 3 2调用使用初始化语法的自定义

6、构造函数 默认情况下 对象初始化器调用默认的无参数的构造函数 但是也可以根据需要调用自定义构造函数 事实上使用对象初始化语法 可以调用任何构造函数 3 3 3内部类型的初始化 也可以使用对象初始化语法来直接初始化类内部的类型 3 3 4理解集合初始化语法 集合是一种在类的内部包含多种其他类型的容器 其初始化语法与内部类型的初始化语法类似 3 4扩展方法 假如想给任何己经编译好的类添加新的功能 例如给 NET中的基类Object增加一个SayHello的方法 在以前 开发人员只能从Object中派生一个基类 如果拥有要扩充的类的源代码 可以更改源代码实现类似的功能 扩展方法的出现解决了必须得更改

7、源代码或者是从Object中派生的问题 开发人员可以在一个单独的类中对己存在的类进行扩展 为其添加附加的方法 并不需要对源始代码进行改动 也不需要从己存类中进行继承 这些附加的方法称为扩展方法 3 4 1定义扩展方法 要定义扩展方法 需要注要三件事情 扩展方法必须被定义在一个静态类中 扩展方法自身必须是一个静态方法 扩展方法中的首个参数必须是this 最后紧跟要扩展的类的名称 扩展方法可以被正确的对象实例调用 也可以使用静态类名静态的调用 3 4 2调用扩展方法 扩展方法一经被定义 可以使用两种方法来进行调用 一种就是实例方法 就像在3 4 1小节中调用的那样 还可以直接使用静态类调用静态方法

8、 3 4 3扩展方法的使用范围 扩展方法由于是静态方法 具有使用上的几个要点需要注意 1 扩展方法的名称不能与要扩展的现在类相同 否则扩展方法将不能被调用到 2 其次是不能在扩展方法中直接访问扩展方法扩展的类的成员变量 由于扩展方法是静态方法 并不属于类成员中的标准方法 因此不能直接进行访问 3 如果扩展方法与被扩展的类具有不同的命名空间 需要在调用扩展方法时引用定义扩展方法的命名空间 3 4 4使用扩展方法扩展接口类型 还可以使用扩展方法来扩展接口的功能 下面举一个示例来演示这个功能的实现 创建一个控制台应用程序 命名为ExtensionInterfaceMethod 3 5匿名类型 匿名类

9、型 如其名字所示 是指不具有名称的类型 在一些情况下 开发人员只需要临时的使用一个类型表达一些信息 这个类只需要保存一些只读的信息 如状态信息等 并不需要关联任何方法 事件等 这时候可以不用显示的去定义一个类 可以考虑使用匿名类型 3 5 1理解匿名类型 匿名类型的创建非常简单 其实就是本章前面所讨论的两种技术的组合 一种是隐式声明 一种是对象初始化器 3 5 2匿名类型的内部呈现 匿名类型续承自System object基类 该类是 NETFramework类库中所有其他类的基类 因此可以直接访问object中的几个方法如GetType ToString和GetHashCode来获取匿名类型

10、的内部信息 3 5 3匿名类型的相等语法 本小节来讨论匿名类型的相等比较 假定有两个匿名类型 可以通过调用重载的Equals方法来进行相等值的比较 3 6局部方法 当C 2 0发布时 笔者对其中的局部类实在是记忆深刻 局部类使开发人员将一个类的实现定义到多个代码文件中 只需要使用关键字Partial 在多个文件中使用相同的类名 编译时 编译器将生成一个完整的类 局部类的使用也非常广泛 比如在类型化数据集中 就需要大量使用局部类来完成自定义的功能 在C 4 0中 微软又再次推出了一个局部方法技术 使开发人员可以在一个类文件中定义方法的声明 而在另外一个类文件中定义方法的实现 3 6 1理解局部方

11、法 局部方法技术与局部类技术在团队开发中非常有用 可以让一个开发人员定义方法的签名 而让另外一个开发人员定义方法的实现 不过局部方法本身具有几个局限性 局部方法仅用于局部类中 局部方法的返回值必须是void 局部方法可以是静态的或者是实例化的 局部方法可以有参数 可以包含参数修饰符如this ref或Params 但是不包括out修饰符 局部方法隐式的访问级别为private 因此不能为虚方法 3 6 2使用局部方法 在Main方法中 实例化一个Book类 并调用BuyBook方法来购买书籍 由于BuyBook会调用局部方法BookInStock来检查库存 并根据库存结果来显示结果到控制台窗口

12、中 3 7Lambda表达式 在C 2 0中 引入了一个匿名方法的特性 使开发人员可以直接为委托添加方法语句块 而不需要显示的创建一个单独的方法 在C 4 0中 提供了一个更加简法的方法来处理 NET中的委托类型 也即Lambda表达式 3 7 1理解Lambda表达式 为了更好的讲述Lambda表达式以便于理解 在这节同样的先创建一个控制台应用程序 命名为LambdaDemo 在本示例中 首先举一个匿名方法的例子 然后来看看Lambda表达式是如何声明并简化匿名方法的代码的 3 7 2剖析Lambda表达式 通过完成上一个例子 相信读者对Lambda表达式有了一个基本的了解 一个Lambda

13、的组成通常如下 首先是一个参数或参数列表 也就是输入变量 在上一个示例中由于需要为委托传递一个字符串类型的变量 因此左侧的是str变量 接下来是 符号 称作Lambda运算符 MSDN中将这个符号念作 goesto 最后是Lambda语句块 可以是单条语句也可以是多个语句的语句块 3 7 3在Lambda中使用多语句块 在上一个示例的Lambda表达式中 只处理了一行语句 也可以为Lambda表达式添加多行语句 3 7 4多参数的Lambda表达式 Lambda表达式中的参数部分同样也非常灵活 即可以添加多个参数 也可以不添加任何参数 3 8LINQ简介 LINQ又称为语言集成查询 在本章中

14、笔者只打算简要的讨论了一下什么是LINQ查询 在本书第17章 将使用一整章的编幅来详细的介绍LINQ技术 语言集成查询让开发人员可以使用 NET程序语言如C 去查询数据源 比如内存中的集合对象 数据库中的表 XML DataSet等等 开发人员不用去分门别类的学习众多的查询语法就可以轻构的查询异构数据源 3 8 1什么是LINQ LINQ的目标是让开发人员使用熟悉的语言如C VB NET访问数据库 而不用去管底层数据库的细节 比如底层到底是ORACLE或者是SQLServer 这些都不用在乎 LINQ提供了丰富的指令来实现复杂的查询 比如数据聚合 联合查询 排序等等 LINQ除了能查询数据之外

15、 还可以执行添加 修改 删除等操作 3 8 2LINQ示例 下面使用VS2010开发一个简单的LINQtoSQL应用程序 步骤如下所示 3 9小结 本章讨论了在C 4 0语言的许多增强的功能 首先介绍了隐式类型声明 由编译器根据上下文进行类型推断 接下来讨论了使用自动属性功能简化编写重复性的属性代码 对象初始化器可以简化开发人员的赋值代码 接下来讨论了如何对一个现有类进行扩展的扩展方法 匿名类型是一种隐式类型 通过使用隐式类型声明和对象初始化器 编译器将自动生成隐式的类型 局部方法简化了团队开发的复杂性 Lambda表达式大大优化匿名方法的代码 最后简单的讨论了LINQ技术 3 10常见面试题

16、 3 10 1你用过自动属性嘛 如何使用 常设计类的开发人员一定会先记住自动属性这个特色 因为它可以节省设计类的时间 并且使代码更直观更简洁 3 10 2描述下LINQ的作用 LINQ的主要作用如下 LINQ可以对所有类型数据的统一编程模型 它使开发人员不用关心数据源是什么 而使用一致的模型查询和使用数据 LINQ不同于SQL查询 它是将SQL查询嵌入到代码中的另一种工具 能够做的事情远远比嵌入的SQL查询要多很多 LINQ比 统一的编程模型 更容易使用 同时也远不止是数据模型的另外一套规则 LINQ是一套简化和统一数据访问的实现方法 它不是要求使用一种特定的架构 它使一些现有访问数据架构的实现更加便利

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 办公文档 > PPT模板库 > PPT素材/模板

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号