欢迎来到天天文库
浏览记录
ID:37672202
大小:1.14 MB
页数:27页
时间:2019-05-28
《深度解析C#中文第一章》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、2第1章C#开发的进化史第1章C#开发的进化史本章概要ß一个进化的例子ßC#的历史背景ß.NET的组成ßSnippy代码段编译器这个世界正在发生飞速的变化,其变化速度之快,有时着实使人感到恐怖。其中,技术领域是变化速度最快的领域之一。尤其是在计算技术方面,无论硬件还是软件,用“日新月异”一词来形容绝不为过。许多老的计算机语言“坚若磐石”,平时除了通过一些标准化工作来进行统一、整合,很少会发生什么变化。但是,较新的语言仍然在进化。C#属于后一类,这意味着两件事情。一方面,总是有更多的东西要学——“精通了一种语言”的感觉可能持续不了多久,“下个版本”说不定什么时候就来了
2、。另一方面,有利之处在于,如果你热情地拥抱新特性,而且愿意改变自己的编程风格来适应新变化,就会发现一种表现力更强的、更强大的软件开发方式。如果你想从新的语言特性中获得最大收益,就需要透彻地理解它。这正是本书要达到的目的——深入C#的核心,使你深入理解它,而非仅仅是一知半解。我不希望被人认为夸夸其谈,但我希望你能与语言“和谐生辉”。如果你着急开始编程,而且感觉自己对C#1的理解没有问题,不妨直接跳到第二部分开始编程。然而,编程并非只是一个简单的“技术活”。理解本部分中的背景知识是为了搞清楚另一个更重要的问题:C#语言和.NETFramework发展的轨迹和内在原因。在
3、本章,我们会对本书将来要重点讨论的几项特性“先暏为快”,会看到虽然C#2解决了人们在使用C#1时遇到的大量问题,但C#3的设计思想会使人们写代码(甚至思考代码)的方式发生重大变化。我会介绍发生变化时的历史背景,指引你走出术语和版本号的迷宫,并帮助你从本书中获得尽可能多的知识,本书讨论了将采取什么样的组织方式。让我们首先以一些代码为例,看看随着时间的推移它们是如何演变的,关键是每次变化都将利用一些新特性。1.1实战演变:变化的代码31.1实战演变:变化的代码1我一直梦想着当一名魔术师,在这一节中,我梦想成真了。这是唯一一次我不会解释原理,或者说不会按部就班地展示例子的
4、情形。事实上,我的计划是先给你留下一个2不可磨灭的印象,而不是教给你具体的知识。在你读完本节的内容之后,如果对C#2和3能做的事情仍然没有感到丝毫兴奋,那么本书或许真的不适合你。相反,如果你迫切地想知道我的“魔术”是怎么玩的——想让我放慢“手法”,直至看清楚所有发生的事3情——那么这正是本书剩余部分要做的事情。事先要提醒你的是,这个例子可能显得十分牵强——明显是为了在尽可能短的代码中包含尽可能多的新特性而“生搬硬造”的。从C#2起,我们将看到泛型、属性的取值4方法(getter)和赋值方法(setter)允许有不同的访问修饰符、可空(nullable)类型以及匿名方
5、法。从C#3开始,我们将看到自动实现的属性、增强的集合初始化器、增强的对象初始化器、Lambda表达式、扩展方法、隐式类型以及LINQ查询表达式。当然还有5其他许多新特性,但我找不到一个恰当的方式把它们一次全部演示完。虽然平时不太可能在如此紧凑的空间中用到所有这些特性,但可以肯定的是,一些常规性的任务确实在真正的应用程序代码中经常出现。6除了“生搬硬造”,这个例子还有点“老生常谈”——但至少你会觉得它比较眼熟。是的,这里展示的是一个产品/名称/价格(product/name/price)的例子,是“hello,world”程序的电子商务版。7为简化讨论,我将代码划分
6、成几段。以下是要做的事情。ß定义一个Product类型,它有一个名称和一个美元价格,另外还有获取一个硬编码的产品列表的方法。8ß以字母顺序打印产品。ß打印价格在$10以上的所有产品。ß思考需要什么才能表示价格未知的产品。9下面将分别探讨上述每一个主题,体验随着C#版本的提高,如何更简单、更优雅地完成相同的任务。在每种情况下,代码发生的变化都用加粗的字体来显示。首先来看看Product类型本身。101.1.1定义产品类型在Product类型内部,没有特别吸引人的东西,它只是封装了几个属性。为方便演11示,我们还要在这个地方创建预定义产品的一个列表。我们覆盖(overr
7、ide)了ToString方法,以便在其他地方打印产品时,它们能显示有用的值。代码清单1-1展示了用C#1写的Product类型。稍后,还会演示在C#2和3中如何达到相同的效果。我们将按照这个12模式演示其他所有代码。代码清单1-1Product类型(C#1)134第1章C#开发的进化史代码清单1-1没有什么难以理解的东西——它毕竟只是C#1代码。然而,它确实证明了C#1代码存在如下的4个局限。ßArrayList没有提供与其内部内容有关的编译时信息。完全可能不慎在GetSam-pleProducts创建的列表中添加一个字符串,而编译器对此没有任何反应。ß代码中
此文档下载收益归作者所有