VisualC#2010入门经典(txt+pdf+epub+mobi电子书下载)


发布时间:2020-06-01 05:07:54

点击下载

作者:[美]ScottDorman著

出版社:人民邮电出版社

格式: AZW3, DOCX, EPUB, MOBI, PDF, TXT

VisualC#2010入门经典

VisualC#2010入门经典试读:

前言

1998年12月底,Microsoft着手推出一种全新的开发平台,旨在提供一种创建和运行下一代应用程序和Web服务的全新方式。这种新平台名为.NET Framework,于2000年6月发布。

.NET Framework将原有Windows接口和服务融合到单个应用程序编程接口(API)下,并将众多新出现的行业标准(如简单对象访问协议[SOAP])和众多原有的Microsoft技术(如Microsoft组件对象模型[COM和COM+]和Active Server Pages[ASP])加入其中。除提供一致的开发体验外,.NET Framework还提供了最大的类库之一,让开发人员能够重点关注应用程序逻辑,而不是常见的编程任务。

最后,应用程序在托管运行环境中运行,而这种环境自动处理内存分配并提供了沙箱(限制访问),这减少甚至消除了众多常见的编程错误。

10年后的今天,.NET Framework在不断发展,它支持新的技术和行业标准,支持动态语言,提供了更多的类。在2008年举行的Microsoft专业开发人员大会(PDC)上,主题之一是“让简单的事情容易,让艰难的事情可能”。.NET Framework第1版秉承了这种宗旨,而每个新版本都在不断向这个目标迈进。

C#编程语言是Anders Hejlsberg、Scott Wiltamuth和Peter Golde为.NET Framework开发的,于 2000年 7月首次发布。鉴于C#是专门为.NET Framework开发的,很多人将其视为.NET Framework的御用语言。作为编程语言,C#借鉴了Delphi 5、C++和 Java 2的语法和主要功能,它是一种类型安全的面向对象通用语言,可用于编写任何类型的应用程序。随着.NET Framework不断发展,C#也在不断发展,以适应.NET Framework的新变化并引入新功能,从而让简单的事情容易,让艰难的事情可能。

虽然.NET Framework支持的语言有50多种,但C#始终是最受欢迎的现代通用语言之一。

针对的读者及组织结构

本书是为刚涉足.NET的程序员和想学习C#的.NET程序员编写的。如果您刚开始学习编程,本书也会有所帮助,但它并非编程入门。本书旨在让读者尽快学会如何使用C#完成编程任务,进而提高编程效率。它全面概述了C#语言,重点是其功能如何帮助您解决问题,旨在让您对C#有最全面的认识。

本书分5部分,每个部分都关注C#的不同方面:从简单的基本知识到高级主题,因此建议按顺序阅读。

第一部分“C#基础”介绍.NET Framework、C#的面向对象编程功能以及C#类型系统和事件的基本知识。

第二部分“C#编程”阐述基本的编程知识。您将学习如何执行循环以及如何使用字符串、正则表达式和集合;接下来,将转向更高级的主题,如异常管理和泛型;最后,将介绍匿名函数(Lambda)、查询表达式(LINQ)以及如何与动态语言交互。

第三部分“使用数据”演示如何与文件系统和流交互、创建和查询 XML 文档以及操作数据库。

第四部分“使用Visual Studio创建应用程序”首先简要地介绍了Visual Studio 2010和应用程序调试,然后创建了一个使用数据绑定和数据验证的Windows客户端应用程序,最后阐述了如何创建Web应用程序。

第五部分“深入探索”简要地介绍了特性编程、动态类型和语言互操作性等高级概念。您将首先学习.NET Framework如何组织内存、垃圾收集器如何工作、.NET Framework提供的确定性终结机制等基本知识;接下来,您将学习如何使用多个线程和并行处理;最后,您将了解Microsoft在.NET Framework的基础上提供的一些新技术,如Silverlight、PowerShell和实体框架。

本书提供了大量的示例,旨在演示现实世界的问题以及如何使用 C#和.NET Framework解决这些问题。在第四部分,还利用前3部分介绍的技能从空白开始创建了一些完整的应用程序。

本书使用的约定

本书使用了一些设计元素和约定,让读者能够充分利用和参考书中的信息。

注意:提供有用的信息,读者可以马上阅读,也可阅读完当前话题后再阅读。

提示:突出那些可让编程更有效的信息。

警告:提醒读者注意可能在特定情况下发生的问题或副作用。

为突出新术语,使用粗体显示它们。

另外,本书对代码和其他文字使用不同的字体。代码使用等宽字体,占位符(表示需要在代码中输入实际单词或字符)使用斜体和等宽字体,需要用户输入的文本用粗体表示。

书中的有些语句过长,一行容纳不下。在这种情况下,使用续行字符指出下一行是当前语句的一部分。

最后的思考

在我使用过的编程语言中,Microsoft .NET Framework和C#始终是最强大、最别致的,让您能够开发下一代杀手级应用程序。阅读本书后,您不可能成为C#专家,但希望您能得心应手地使用.NET和C#创建应用程序。|第一部分|C#基础第1章.NET Framework和C#

本章将介绍:了解.NET Framework;并行计算平台(Parallel Computing Platform);动态语言运行时(Dynamic Language Runtime)的作用;C#语言概述;C#语言的语法;编写第一个C#程序。

学习新语言与学骑自行车或学开车类似,必须首先学习基本知识,让您有信心学会更复杂的操作。理解基本原理并对实现目标充满信心后,目标便突然间变得不那么遥不可及了。阅读本章后,读者将对如下方面有基本认识:.NET Framework;.NET Framework组件以及这些组件之间的关系;如何创建应用程序。您将学习 C#语言的基本知识以及如何编写第一个.NET应用程序。1.1 .NET Framework

.NET Framework提供了一些工具和技术,让开发人员能够以独立于语言和平台的方式创建并运行下一代应用程序和Web服务。它提供了一个庞大的类库,这个类库支持众多常见的任务,简化了众多艰难的任务,让您能够将更多的时间用于解决手头的任务:以尽可能高效的方式满足业务需求。

.NET Framework具有如下功能。提供了一个运行环境,以简化软件开发过程,降低版本冲突的可能性。确保代码的安全执行。基于行业标准进行所有通信,从而能够与非.NET代码集成。让应用程序的开发过程独立于语言和平台,确保各种应用程序的开发体验都是一致的。提供了一个运行环境,尽可能消除了脚本语言或解释型语言的性能问题。

为实现上述目标,.NET Framework包含 4个组件。

第一个组件是公共语言运行时(Common Language Runtime),可将其视为 .NET Framework 的核心。就像心脏让机体能够正常运行一样,公共语言运行时提供了低级核心服务供应用程序使用,并负责管理应用程序的代码。针对.NET Framework编写的代码称为托管代码(managed code),而其他代码称为非托管代码(unmanaged code)。

.NET Framework的第二个组件是类库,它包含大量可重用的类(类型),可用于开发您能够想象得到的任何应用程序。

注意:Framework类库

Framework类库包含4000多个公有类,是当今最大的类库之一。

.NET Framework通过类库在公共语言运行时中支持并行编程,并在并行计算平台中提供了诊断工具。并行计算平台是.NET Framework的第三个组件,让您能够以自然而简单的方式编写高效的可扩展代码,以充分利用多个处理器。

.NET Framework 的第四个组件是动态语言运行时,它建立在公共语言运行时的基础之上,向诸如IronRuby和IronPython等动态语言提供语言服务。与诸如C#等通用语言相比,动态语言更擅长执行某些任务,而动态语言运行时让您能够根据业务需求选择最合适的语言。不仅如此,动态语言运行时还让非动态语言(如C#)能够以简单而一致的语法使用动态对象,而不管这些对象源自COM、IronRuby、IronPython还是JavaScript。

提示:动态语言是什么?

在诸如 C#等使用静态类型的语言中,由编译器确定类型安全,如果无法确定,就将生成错误。在动态语言中,不会尝试确定类型安全。另外,大多数动态语言在运行阶段执行更复杂的类型操作,如判断方法重载是否正确,而C#在编译阶段做出这种判断。

实际上,对于静态类型语言在编译阶段执行的所有任务,动态语言都将在运行阶段执行。这包括在运行阶段使用eval或repl循环生成代码,以修改运行对象的状态。因此,动态语言提供了极大的灵活性,常用作脚本语言。

一些常见的动态语言包括Jscript、JavaScript、Python、IronPython、Ruby和IronRuby。

针对.NET Framework编写的代码称为托管代码,而根据这些代码生成的应用程序称为托管应用程序。托管应用程序运行时,将自动承载( host )相应的公共语言运行时。.NET Framework 不仅提供了大量的运行时宿主,还提供了让您能够编写宿主的工具。这样,诸如Internet信息服务(IIS)和Microsoft SQL Server等非托管应用程序也可承载公共语言运行时备份,从而能够利用托管功能和非托管功能。

图 1.1说明了.NET Framework的各个组件与应用程序、操作系统和非托管应用程序之间的关系。图1.1.NET Framework环境1.1.1 公共语言运行时

公共语言运行时(Common Language Runtime,CLR)是.NET Framework的核心,提供了一个统一类型系统和一个托管运行环境,它们为开发和执行独立于语言和平台的应用程序打下了坚实的基础,还有助于消除(至少是减少)众多常见的编程错误。

1.通用类型系统

前面介绍的统一类型系统称为通用类型系统(Common Type System,CTS),让所有.NET语言共享相同的类型定义,这样便可以一致的方式操作这些类型。这有助于确保正确地编写应用程序,其原因如下。消除了将不兼容的数据赋给类型的可能性。每种.NET语言的类型描述都相同,而不管用于定义该类型的语言是什么。以一致的方式操作类型。

提示:本章后面将简要地介绍类型,而第2章将更详细地讨论它们。

注意:类型安全和CTS

通用类型系统和公共语言规范为.NET Framework类型安全打下了坚实的基础。

这让.NET Framework能够以一致的方式倡导类型安全,而无需强制执行类型安全。强制执行类型安全的任务留给了语言编译器和稍后将介绍的虚拟执行系统。

通用语言系统以独立于语言的方式定义类型,因此它必须考虑这些语言之间的差别。通用语言系统提供了一个最基本的规则集,所有.NET语言及其编译器都必须遵守,这个规则集称为公共语言规范(Common Language Specification,CLS)。这种通用定义让语言集成成为可能:使用另一种语言中定义的类型,就像它是在当前语言中定义的一样。

提示:CLS遵从性

几乎Framework类库中的所有类都符合CLS,因此任何.NET语言都可使用这个类库。如果要开发自己的类库,那么建议您确保这些类也符合CLS,这样它们才能得到最广泛的使用。

2.通用中间语言

通用类型系统和公共语言规范有助于实现独立于语言和平台的目标,但是如果编译器生成的可执行目标代码依赖于硬件平台,那么它们带来的好处将消失殆尽。为解决这个问题,将托管代码进行了部分编译,以生成使用一种低级语言的代码,这种语言称为通用中间语言(Common Intermediate Language,CIL)。通用中间语言类似于汇编语言,由表示高级语言代码的低级指令组成。

程序集(assembly)是部分编译单元(包),包含CIL指令并为定义类型提供了逻辑边界。由于程序集是部分编译的,因此可以是32位的,也可以是64位的,这取决于操作系统和硬件。这意味着托管应用程序是独立于平台的,且无需重新编译或添加特殊指令就可以充分利用硬件技术。

3.虚拟执行系统

公共语言运行时的另一个重要组成部分是托管运行环境,这种环境称为虚拟执行系统(Virtual Execution System,VES),它负责处理应用程序所需的低级核心服务。就像 Java应用程序需要有 Java 虚拟机(JVM)才能运行一样,托管应用程序也需要有 CLR(具体地说是VES)才能运行。

.NET应用程序启动时,由VES负责加载并执行CIL代码,并管理应用程序所需的内存分配。换句话说,VES提供服务和基础设施,从而消除平台和语言差异带来的影响。

在加载和编译过程中,VES执行各种验证,以确保文件格式、程序集元数据和CIL是一致的,并确保CIL指令不能非法访问内存。这样,应用程序将只能访问它被授权访问的内存和资源。可将这种受限的环境视为沙箱(sandbox)。

既然VES提供了运行环境并执行包含CIL的程序集,那么这些程序集是解释型还是编译型的呢?别忘了,.NET Framework的目标之一是提供这样的运行环境:最大程度地减少甚至消除脚本(解释型语言)的性能问题。这意味着CIL代码是编译型的,但编译是在什么时候完成的呢?

VES 提供的服务之一是即时(Just-In-Time,JIT)编译器。即时编译指的是在运行阶段将经过部分编译的CIL代码转换为可执行的目标代码(本机代码)。

提示:即时编译

即时编译过程被称为jitting,而JIT编译器被称为jitter。

通过以这种方式编译代码,.NET Framework获得了比传统解释型语言高得多的速度。相对于常规(静态)编译,即时编译也有优势,因为它可在运行阶段实施安全保障,还可在运行阶段重新编译以进一步优化代码。.NET Framework JIT编译器进行了高度优化,以便将CIL代码编译成高效的目标代码;它在需要时运行,并缓存编译后的代码供以后使用。

4.内存管理和垃圾收集

在众多非托管编程语言中,内存管理是个经典问题,它可能导致一些常见的错误。使用这些编程语言时,开发人员负责在正确的时间分配和回收内存。.NET Framework让VES自动分配和回收内存,从而解决了这个问题。

这种自动内存管理称为垃圾收集,正是它让C#(和其他.NET语言)成为一种垃圾收集语言。垃圾收集让您无需过多地为释放不需要的内存而操心,它避免了众多常见的编程错误,让您创建的应用程序更稳定,并可重点关注应用程序所需的业务逻辑。

即使有了自动内存管理,理解垃圾收集器如何与程序以及您创建的类型交互也很重要。深入讨论垃圾收集超出了本书的范围,但第22章将简要地讨论它。1.1.2 Framework类库

虽然CLR是.NET Framework的核心,但真正赋予它力量的是Framework类库(FCL)。这个类库类似于Java类库、C++标准模板库(STL)、Microsoft活动模板库(ATL)、Microsoft Foundation Class(MFC)、Borland对象窗口库(OWL)及其他类库。

与这些类库一样,FCL也包含大量可重用的类型,这简化了众多常见的编程任务,从而提供了开发效率。

图1.2列出了FCL中的一些类型,并按功能对它们进行了编组。图1.2 Framework类库

注意:Framework类库

Framework类库充分说明了.NET Framework让简单的事情容易、让艰难的事情可能的特征。

虽然不使用 FCL 提供的类型也可以创建应用程序,但实际上不可能这样做。

在最底层是基础类库(Base Class Libraries,BCL),它们充当所有.NET语言的标准运行环境,提供的类型可表示CLR类型、集合、流和其他数据结构,可用于操作字符串、执行基本的文件存取和各种其他操作。BCL总共有172 种公有类型,而Ecma-335 标准(Common Language Infrastructure (CLI), 4th Edition)定义的标准库总共有 331种公有类型。

提示:Ecma是什么?

Ecma International是一个创建于 1961年的国际标准协会,旨在帮助制定信息通信技术和消费电子产品的使用标准。

2001年 12月 14日,C#语言规范(C# Language Specification)和通用语言基础设施(Common Language Infrastructure,CLI)获批成了Ecma标准。

CLI是公共语言运行时(Common Language Runtime)的开源版本。在Ecma 的鼓励下,开发了 C#和.NET Framework 的多个开源版本,包括DotGNU和Mono。其中最著名的可能是Mono,它提供的.NET开发平台实现可用于Linux、BSD、UNIX、Mac OS X、Solaris和Windows操作系统。

正是Ecma提供的开源标准以及诸如DotGNU和Mono等项目让开发技能和应用程序几乎可用于任何平台。

FCL 中的其他类关注的都是特定功能,如提供数据访问、XML 支持、全球化支持、诊断、配置、联网、通信、业务流程支持、Web应用程序和Windows桌面应用程序等。

命名空间

鉴于.NET Framework类库包含数千个类,需要采取某种方式避免类名混淆,并提供一种方便的层次编组机制。为此,.NET Framework采用了命名空间的概念。命名空间不过是一系列类型,对类型的可见性没有任何影响。命名空间可包含多个程序集。.NET Framework使用层次型命名空间提供了一个渐进型框架,打造出了一个功能强大而又易于使用的开发平台。

注意:命名空间和类型名

命名空间使用点分式语法表示层次结构,每层之间都用句点(.)分隔。

在类型的完整名称中,以最右边的句点为分界点,左边是命名空间,而右边是类型名。例如, System.Printing.PrintDriver 是位于命名空间System.Printing中的类型PrintDriver的完整名称。

然而,只有.NET编程语言支持命名空间。在CLR中,类型总是用完整名称标识,其中包含类型的名称及其所属的命名空间。

.NET Framework类库包含大约 4000个命名空间,但有些命名空间您一辈子也不会与它打交道。随着您越来越熟悉这个类库,您将发现有些命名空间是您较常用的,而它们可能与您的同事常用的命名空间不同。

表1.1列出了最常用的命名空间。表1.1 常用的命名空间1.1.3 并行计算平台

一直以来,都可使用托管和非托管代码编写多线程和异步应用程序,但要正确地编写这样的应用程序始终很困难。.NET Framework 4.0提供的并行计算平台简化了这种应用程序的编写工作。这是一种全新的编程模型,适用于托管代码和非托管代码。它提高了抽象程度,让您无需考虑较低级的概念,如线程和锁定。

提示:有关多线程和并行编程的更详细信息,请参阅第23章。

对于托管代码,并行计算平台提供了常见循环指令的并行实现和LINQ to Objects的并行实现,还新增了可避免死锁的线程安全集合。Visual Studio 2010新增了一些诊断工具,如并行分析器和处理器迁移分析,让您能够轻松地调试和优化代码。

并行计算平台简化了这样的机制:编写可高效利用多个处理器的代码。要确定什么样的代码适用于并行计算,仍需要进行分析,当您考虑如何解决特定问题时,这将改变您的思考方式。第23章将简要地介绍并行计算平台的上述方面。1.1.4 动态语言运行时

动态语言运行时(Dynamic Language Runtime,DLR)是.NET Framework 4.0新增的,这是一个为动态语言提供服务和支持的运行环境。

DLR 建立在公共语言运行时的基础之上,这意味着动态语言可与其他.NET 语言集成。DLR 还让现有的静态语言(如 C#)能够支持动态功能,这让它们能够以一致的方式使用动态对象,而不管这些对象来自何方。

提示:第21章将详细介绍如何集成动态语言。

有了 DLR 后,便可支持动态语言,而静态语言也可使用动态功能。这样,开发人员就可根据要解决的问题选择最合适的语言,且创建的动态代码可供其他开发人员和.NET语言轻松地使用。1.2 C#语言

如果您是C、C++或Java程序员,将很快熟悉C#,因为其语法与这些语言类似。如果您熟悉Visual Basic(运行在.NET Framework上的任何Visual Basic版本,而不是Visual Basic 6.0或更早的版本),可能对C#语法感到陌生,但应熟悉Framework类库。如果您从未使用过上述任何语言,也将发现与众多其他语言相比,使用C#进行编程更容易,因为它语法优雅,类库庞大。

提示:语言灵感

作为一种语言,C#借鉴了众多不同的语言,以形成其语法和主要功能,这包括Delphi 5、C++和 Java 2。

泛型系统(第11章将更详细地介绍)是从Eiffel和Ada那里借鉴而来的;而LINQ和Lambda表达式评估(参见第12章)主要是从Haskell和Lisp那里借鉴而来的。

C#还添加了一些来自动态语言(如Ruby)和函数语言(如F#)的功能。

与众多现代编程语言一样,C#也是一种面向对象的语言,全面支持面向对象编程概念,如继承、多态、封装和抽象。另外,C#还支持面向组件编程,这让您能够指定自带文档的独立功能单元(组件),为此只需提供一个模型,它包含属性、方法、事件以及有关组件的元数据。C#本身就支持这些概念,这使得创建和使用组件的过程非常自然。如果您不熟悉这些概念,请参阅第3章。

C#提供的语言功能让开发人员能够利用 CLR 的改进。垃圾收集功能自动管理内存;异常处理提供了一种可扩展的结构化方法,让您能够检测错误并从错误中恢复。作为一种类型安全语言,下述情况根本不可能发生:变量未初始化、非法访问内存、将一种类型的数据存储到只能接受另一种类型的地方。

另外,C#的语言功能和语法设计还减少了您需要编写的代码量,这让代码更简单,降低了发生常见错误的可能性。在有些情况下,这种改进不过是改变语法:简化复杂或容易出错的语言功能,让它们更容易使用和理解;在其他情况下,这种改进提供了更高级的功能。

每个新的C#版本都做了改进:新增语言功能、改进语法,致力于让简单的事情容易、让困难的事情变得可能、让糟糕的事情难以发生。随着C#不断新增功能,简单的事情变得更容易了,困难的事情变得容易了,以前不可能的事情变得可能了。1.2.1 类型

在C#中,类型是对值的描述。每当您需要一个值时,就需要一种类型。正如前面介绍通用类型系统时指出的,类型定义了允许的值以及这些值支持的操作。在C#中,每个值都由其所属的类型全面描述,且是其所属类型的一个实例。所谓全面描述,指的是类型明确地指定了值的表示方式以及可对它执行的操作。

C#类型分两类:值类型和引用类型。值类型描述的值是完全独立的,这包括数值类型、枚举类型和结构;引用类型存储指向值的引用,而不是值本身。

提示:第2章更深入地探讨了值类型和引用类型之间的差别。

C#提供了众多预定义的值类型和几种预定义的引用类型,您还可以创建用户定义的类型。在接下来的几章中,将更详细地探讨值类型和引用类型之间的差别以及如何创建用户定义的类型。但就目前而言,只需知道一个最重要的差别:值类型包含实际值,而引用类型包含指向实际数据的引用。1.2.2 语句和表达式

语句是一条完整的程序指令,必须以分号(;)结尾。每条语句中只能包含一条指令,这看起来限制性很强,但C#还提供了语句块,这是一组用大括号括起的语句。在可以使用单条语句的任何地方都可使用语句块。

由于语句以分号结尾,因此可使用空白(如空格、制表符和换行符)调整代码的排列方式。最佳的方法是采用一种简单而一致的风格(如果您的公司或团队没有这样的风格),让代码更容易阅读和维护。

警告:空白

虽然编译器通常忽略空白,但是类型声明、标识符和其他关键字之间的空白很重要。如果没有空白,编译器将无法识别关键字。

表达式的结果为值。如果将语句视为操作,那么表达式就是计算。结果为布尔值(true或false)的表达式常用于判断条件是否满足,这种表达式称为布尔表达式。1.2.3 变量和常量

对于变量,最简单的定义是它表示一个存储位置,其中的值可随时间流逝而变化。最常见的变量是局部变量和字段,它们都可通过指定类型、标识符和可选的初值来定义:

int a;

int b = 1;

如果要声明多个类型相同的变量,就可将声明合并在一起,如下所示:

int a, b;

在限定作用域(如方法)内声明的变量称为局部变量,只能在该作用域内通过名称访问它。

注意:作用域、声明空间和寿命

可将作用域视为容器,只有在该容器内才能通过非限定名合法地访问变量。这不同于声明空间,在声明空间内,不允许有两个名称相同的标识符。如果说作用域指定了您在哪里能够使用某个名称,那么声明空间就指出了该名称在哪里是唯一的。

变量的寿命与其作用域紧密相连,它决定了变量在多长时间内可用。只要当前执行的代码还位于变量的作用域内,该变量就可用。

第3章将更详细地介绍作用域和声明空间。

字段是在限定作用域内声明的变量,它要么与类型本身相关联,要么与类型的一个实例相关联。在前一种情况下称为静态变量(可将其视为一种全局变量);在后一种情况下则称为实例变量。使用局部变量和字段之前,必须将其初始化;另外,只有在这些变量的声明所属的代码块内才能访问它们。

程序清单1.1是一个名为Color的类型,其中包含私有实例字段red、blue和green,还包含公有静态字段White、Red、Blue和Green。

程序清单1.1 Color类

使用静态字段之前,需要对其进行初始化,但是此后无法保证它们的值不会变化。为了声明初始化后就不能修改的字段,可以创建只读字段。

提示:有关只读字段的更详细信息,请参阅第3章。

程序清单1.2列出了Color类中被修改的代码行。

程序清单1.2 使用只读字段的Color类

常量表示在编译阶段可计算的值。常量与类型本身相关联,就像是静态的。与变量一样,常量可在限定作用域内声明,也可以是全局的;与变量不同的是,必须在声明常量时对其进行初始化。

提示:字面值和魔数

字面值通常是有特殊含义的数值,并在代码中直接指定。随着时间的推移,可能忘记字面值的含义,导致相应的代码难以维护。因此,这些字面值常被称为魔数(magic numbers)。通过使用常量而不是字面值,可将其含义保留下来,让代码的含义不言自明。

对于下述函数中的数字,您花了多长时间才弄明白其含义呢?

如果使用常量重新编写该函数,其中的魔数的含义将非常明显:

在这个示例中,299792458是一个字面值,因此可将其视为一个魔数。您可能猜到了,应使用常量而不是字面值,因为与数字相比,常量的名称可更好地说明其含义,还可确保其值不会变化。

声明变量或常量的语句通常称为声明语句,可位于代码块的任何地方。1.2.4 标识符和关键字

声明变量、字段或常量时,必须指定数据类型并提供有意义的名称,后者称为标识符。

标识符必须遵循如下规则。只能包含字母(大写和小写)、数字和下划线。标识符必须以字母或下划线打头,但对于公有标识符,以一个或多个下划线打头是一种糟糕的做法,应避免这样做。在给定的声明空间内,标识符必须是唯一的。标识符是区分大小写的。

选择标识符时,还应遵守的其他指导原则如下。标识符应易于阅读。标识符应使用缩写。标识符应提供尽可能丰富的含义。

在C#中,标识符是区分大小写的。推荐的命名约定建议如下:对于变量名和参数名,使用Camel大小写规则,该规则要求除第一个单词外,其他单词的首字母都大写,如bookTitle;对于方法名和其他标识符,使用Pascal大小写规则,该规则要求每个单词的首字母都大写,如BookTitle。

提示:Camel和Pascal大小写规则

采用Camel大小写规则时,标识符中的大写字母看起来向驼峰,这种大小写规则因此而得名。Pascal大小写规则因其被Pascal编程语言广泛采用而得名(Turbo Pascal语言最初是由Anders设计的)。

Microsoft不再推荐使用Hungarian表示法,也不推荐使用下划线分隔单词,这两种表示法在其他语言中很常用。

如果您熟悉其他区分大小写的语言,如 C、C++或 Java,就会觉得这很正常;如果您以前使用的是不区分大小写的语言,如Visual Basic,可能需要一段时间才能适应。所幸的是, Visual Studio 2010代码编辑器提供的功能可让这种过渡更容易。

由于标识符定义了特定元素的名称,因此C#也需要使用标识符向编译器和您表示特殊含义,它保留了一些标识符供自己使用,这些标识符称为关键字。

在C#中,有77个标识符在任何情况下都属于关键字,如表1.2所示。表1.2 C#关键字续表

试读结束[说明:试读内容隐藏了图片]

下载完整电子书


相关推荐

最新文章


© 2020 txtepub下载