微信扫码下载

内容简介

  C#作为微软的旗舰编程语言,深受程序员喜爱,是编写高效应用程序的先选语言。VisualC#2013提供了大量新功能,《微软技术丛书:Visual C# 2013从入门到精通》围绕语言的基础知识和这些新功能全面介绍了如何利用VisualStudio2013和.NETFramework4.5编写C#应用程序。《微软技术丛书:Visual C# 2013从入门到精通》沿袭深受读者欢迎的StepbyStep风格,通过合理的练习引导读者逐步构建在Windows7和Windows8.1上运行的应用程序、访问SQLServer数据库以及开发多线程应用等。
  《VisualC#2013从入门到精通》共27章,结构清晰,叙述清楚。所有练习均在VisualStudio2013简体中文版上进行过全面演练。无论是刚开始接触面向对象编程的新手,还是打算迁移到C#的C、C++或Java程序员,都可以从《微软技术丛书:Visual C# 2013从入门到精通》汲取到新的知识。迅速掌握C#编程技术。
  AuthorizedtranslationfromtheEnglishlanguageedition,entitledMICROSOFTVISUALC#2013STEPBYSTEP,1stEdition,9780735681835bySHARP,JOHN,publishedbyPearsonEducation,Inc,publishingasMicrosoftPress,Copyright©2014byJohnSharp.
  Allrightsreserved.Nopartofthisbookmaybereproducedortransmittedinanyformorbyanymeans,electronicormechanical,includingphotocopying,recordingorbyanyinformationstorageretrievalsystem,withoutpermissionfromPearsonEducation,Inc.CHINESESIMPLIFIEDlanguageeditionpublishedbyTSINGHUAUNIVERSITYPRESSLIMITEDCopyright©2015.
  《VisualC#2013从入门到精通》中文简体翻译版由PearsonEducation授权给清华大学出版社在中国境内(不包括中国香港、澳门特别行政区)出版发行。

目录

第I部分VisualC#和VisualStudio2013概述
第1章欢迎进入C#编程世界
1.1开始在VisualStudio2013环境中编程
1.2编写第一个程序
1.3使用命名空间
1.4创建图形应用程序
1.4.1探索WindowsStore应用程序
1.4.2探索WPF应用程序
1.4.3向图形应用程序添加代码
小结
第1章快速参考
第2章使用变量、操作符和表达式
2.1理解语句
2.2使用标识符
2.3使用变量
2.3.1命名变量
2.3.2声明变量
2.4使用基元数据类型
2.4.1未赋值的局部变量
2.4.2显示基元数据类型的值
2.5使用算术操作符
2.5.1操作符和类型
2.5.2深入了解算术操作符
2.5.3控制优先级
2.5.4使用结合性对表达式进行求值
2.5.5结合性和赋值操作符
2.6变量递增和递减
2.7声明隐式类型的局部变量
小结
第2章快速参考
第3章方法和作用域
3.1创建方法
3.1.1声明方法
3.1.2从方法返回数据
3.1.3调用方法
3.2使用作用域
3.2.1定义局部作用域
3.2.2定义类作用域
3.2.3重载方法
3.3编写方法
3.4使用可选参数和具名参数
3.4.1定义可选参数
3.4.2传递具名参数
3.4.3消除可选参数和具名参数的歧义
小结
第3章快速参考
第4章使用判断语句
4.1声明布尔变量
4.2使用布尔操作符
4.2.1理解相等和关系操作符
4.2.2理解条件逻辑操作符
4.2.3短路求值
4.2.4操作符的优先级和结合性总结
4.3使用if语句做出判断
4.3.1理解if语句的语法
4.3.2使用代码块分组语句
4.3.3嵌套if语句
4.4使用switch语句
4.4.1理解switch语句的语法
4.4.2遵守switch语句的规则
小结
第4章快速参考
第5章使用复合赋值和循环语句
5.1使用复合赋值操作符
5.2使用while语句
5.3编写for语句
5.4编写do语句
小结
第5章快速参考
第6章管理错误和异常
6.1处理错误
6.2尝试执行代码和捕捉异常
6.2.1未处理的异常
6.2.2使用多个catch处理程序
6.2.3捕捉多个异常
6.2.4传播异常
6.3使用checked和unchecked整数运算
6.3.1编写checked语句
6.3.2编写checked表达式
6.4抛出异常
6.5使用finally块
小结
第6章快速参考
第II部分理解C#对象模型
第7章创建并管理类和对象
7.1理解分类
7.2封装的目的
7.3定义并使用类
7.4控制可访问性
7.4.1使用构造器
7.4.2重载构造器
7.5理解静态方法和数据
7.5.1创建共享字段
7.5.2使用const关键字创建静态字段
7.5.3静态类
7.5.4匿名类
小结
第7章快速参考
第8章理解值和引用
8.1复制值类型的变量和类
8.2理解null值和可空类型
8.2.1使用可空类型
8.2.2理解可空类型的属性
8.3使用ref和out参数
8.3.1创建ref参数
8.3.2创建out参数
8.4计算机内存的组织方式
8.5System.Object类
8.6装箱
8.7拆箱
8.8数据类型的安全转换
8.8.1is操作符
8.8.2as操作符
小结
第8章快速参考
第9章使用枚举和结构创建值类型
9.1使用枚举
9.1.1声明枚举
9.1.2使用枚举
9.1.3选择枚举字面值
9.1.4选择枚举的基本类型
9.2使用结构
9.2.1声明结构
9.2.2理解结构和类的区别
9.2.3声明结构变量
9.2.4理解结构的初始化
9.2.5复制结构变量
小结
第9章快速参考
第10章使用数组
10.1声明和创建数组
10.1.1声明数组变量
10.1.2创建数组实例
10.1.3填充和使用数组
10.1.4创建隐式类型的数组
10.1.5访问单独的数组元素
10.1.6遍历数组
10.1.7数组作为方法参数和返回值传递
10.1.8复制数组
10.1.9使用多维数组
10.1.10创建交错数组
小结
第10章快速参考
第11章理解参数数组
11.1回顾重载
11.2使用数组参数
11.2.1声明参数数组
11.2.2使用paramsobject[]
11.2.3使用参数数组
11.3比较参数数组和可选参数
小结
第11章快速参考
第12章使用继承
12.1什么是继承
12.2使用继承
12.2.1复习System.Object类
12.2.2调用基类构造器
12.2.3类的赋值
12.2.4声明新方法
12.2.5声明虚方法
12.2.6声明重写方法
12.2.7理解受保护的访问
12.3理解扩展方法
小结
第12章快速参考
第13章创建接口和定义抽象类
13.1理解接口
13.1.1定义接口
13.1.2实现接口
13.1.3通过接口来引用类
13.1.4使用多个接口
13.1.5显式实现接口
13.1.6接口的限制
13.1.7定义和使用接口
13.2抽象类
13.3密封类
13.3.1密封方法
13.3.2实现并使用抽象类
小结
第13章快速参考
第14章使用垃圾回收和资源管理
14.1对象的生存期
14.1.1编写析构器
14.1.2为什么要使用垃圾回收器
14.1.3垃圾回收器的工作原理
14.1.4慎用析构器
14.2资源管理
14.2.1资源清理方法
14.2.2异常安全的资源清理
14.2.3using语句和IDisposable接口
14.2.4从析构器中调用Dispose方法
14.3实现异常安全的资源清理
小结
第14章快速参考
第III部分用C#定义可扩展类型
第15章实现属性以访问字段
15.1使用方法实现封装
15.2什么是属性
15.2.1使用属性
15.2.2只读属性
15.2.3只写属性
15.2.4属性的可访问性
15.3理解属性的局限性
15.4在接口中声明属性
15.5生成自动属性
15.6使用属性来初始化对象
小结
第15章快速参考
第16章使用索引器
16.1什么是索引器
16.1.1不用索引器的例子
16.1.2使用索引器的同一个例子
16.1.3理解索引器的访问器
16.1.4对比索引器和数组
16.2接口中的索引器
16.3在Windows应用程序中使用索引器
小结
第16章快速参考
第17章泛型概述
17.1object的问题
17.2泛型解决方案
17.2.1对比泛型类与常规类
17.2.2泛型和约束
17.3创建泛型类
17.3.1二叉树理论
17.3.2使用泛型构造二叉树类
17.4创建泛型方法
17.5可变性和泛型接口
17.5.1协变接口
17.5.2逆变接口
小结
第17章快速参考
第18章使用集合
18.1什么是集合类
18.1.1List集合类
18.1.2LinkedList集合类
18.1.3Queue集合类
18.1.4Stack集合类
18.1.5Dictionary集合类
18.1.6SortedList集合类
18.1.7HashSet集合类
18.2使用集合初始化器
18.3Find方法、谓词和Lambda表达式
18.4比较数组和集合
小结
第18章快速参考
第19章枚举集合
19.1枚举集合中的元素
19.1.1手动实现枚举器
19.1.2实现IEnumerable接口
19.2使用迭代器来实现枚举器
19.2.1一个简单的迭代器
19.2.2使用迭代器为Tree类定义枚举器
小结
第19章快速参考
第20章分离应用程序逻辑并处理事件
20.1理解委托
20.1.1.NETFramework类库的委托例子
20.1.2自动化工厂的例子
20.1.3不使用委托来实现工厂
20.1.4使用委托来实现工厂
20.1.5声明和使用委托
20.2Lambda表达式和委托
20.2.1创建方法适配器
20.2.2Lambda表达式的形式
20.3启用事件通知
20.3.1声明事件
20.3.2订阅事件
20.3.3取消订阅事件
20.3.4引发事件
20.4理解用户界面事件
小结
第20章快速参考
第21章使用查询表达式来查询内存中的数据
21.1什么是语言集成查询
21.2在C#应用程序中使用LINQ
21.2.1选择数据
21.2.2筛选数据
21.2.3排序、分组和聚合数据
21.2.4联接数据
21.2.5使用查询操作符
21.2.6查询Tree对象中的数据
21.2.7LINQ和推迟求值
小结
第21章快速参考
第22章操作符重载
22.1理解操作符
22.1.1操作符的限制
22.1.2重载的操作符
22.1.3创建对称操作符
22.2理解复合赋值
22.3声明递增和递减操作符
22.4比较结构和类中的操作符
22.5定义成对的操作符
22.6实现操作符
22.7理解转换操作符
22.7.1提供内建转换
22.7.2实现用户自定义的转换操作符
22.7.3再论创建对称操作符
22.7.4添加隐式转换操作符
小结
第22章快速参考
第IV部分使用C#构建Windows8.1专业应用
第23章使用任务提高吞吐量
23.1使用并行处理来执行多任务处理
23.2用.NETFramework实现多任务处理
23.2.1任务、线程和线程池
23.2.2创建、运行和控制任务
23.2.3使用Task类实现并行处理
23.2.4使用Parallel类对任务进行抽象
23.2.5什么时候不要使用Parallel类
23.3取消任务和处理异常
23.3.1协作式取消的原理
23.3.2为Canceled和Faulted任务使用延续任务
小结
第23章快速参考
第24章通过异步操作提高响应速度
24.1实现异步方法
24.1.1定义异步方法:问题
24.1.2定义异步方法:解决方案
24.1.3定义返回值的异步方法
24.1.4异步方法和WindowsRuntimeAPI
24.2用PLINQ进行并行数据访问
24.2.1用PLINQ增强遍历集合时的性能
24.2.2取消PLINQ查询
24.3同步对数据的并发访问
24.3.1锁定数据
24.3.2用于协调任务的同步基元
24.3.3取消同步
24.3.4并发集合类
24.3.5使用并发集合和锁来实现线程安全的数据访问
小结
第24章快速参考
第25章实现WindowsStore应用程序的用户界面
25.1什么是WindowsStore应用
25.2使用空白模板构建WindowsStore应用
25.2.1实现可伸缩的用户界面
25.2.2向用户界面应用样式
小结
第25章快速参考
第26章在WindowsStore应用程序中显示和搜索数据
26.1实现Model-View-ViewModel模式
26.1.1通过数据绑定显示数据
26.1.2通过数据绑定修改数据
26.1.3为ComboBox控件使用数据绑定
26.1.4创建ViewModel
26.1.5向ViewModel添加命令
26.2Windows8.1合约
26.2.1实现搜索合约
26.2.2导航至所选项
小结
第26章快速参考
第27章在WindowsStore应用程序中访问远程数据库
27.1从数据库获取数据
27.1.1创建实体模型
27.1.2创建和使用RESTWeb服务
27.2通过RESTWeb服务插入、更新和删除
小结
第27章快速参考

精彩书摘

  第1部分

  VisualC#和VisualStudio2013概述

  MicrosoftVisualC#是Microsoft的一种强大的、面向组件的语言。C#在Microsoft.NETFramework的架构中扮演重要角色,一些人甚至将它与C在UNIX开发中的地位相提并论。如果懂得C、C++或Java语言,会发现C#的语法非常熟悉。即使以前习惯用其他语言写程序,也能迅速掌握C#的语法——只需学会在恰当的地方添加大括号和分号。

  第Ⅰ部分是C#基础知识。将学习如何声明变量,如何使用加(+)和减(-)操作符操纵变量中的值,如何写方法和向方法传递实参,如何使用选择语句(例如if)和循环语句(例如while),以及如何利用“异常”得体和方便地处理错误。这些主题构成了C#语言的核心。掌握了这些基础知识,就可顺利过渡到第Ⅱ~IV部分的高级主题。

  第1章欢迎进入C#编程世界

  本章旨在教会你:

  使用VisualStudio2013编程环境

  创建C#控制台应用程序

  使用命名空间

  创建简单的C#图形应用程序

  本章是VisualStudio2013入门指引。VisualStudio2013是Windows应用程序理想的编程环境。它提供了丰富的工具集,是写C#代码的好帮手。《微软技术丛书:Visual C# 2013从入门到精通》将循序渐进解释它的众多功能。本章用VisualStudio2013构建简单C#应用程序,为开发高级Windows解决方案做好铺垫。

  1.1开始在VisualStudio2013环境中编程

  VisualStudio2013编程环境提供了丰富的工具,能创建从小到大、在Windows7,Windows8和Windows8.1上运行的C#项目。在创建的项目中,甚至能无缝合并用不同语言(比如C++,VisualBasic和F#)写的模块。第一个练习是启动VisualStudio2013编程环境,并学习如何创建控制台应用程序。

  注意控制台应用程序是在命令提示符窗口而非图形用户界面(GUI)中运行的应用程序。

  在VisualStudio2013中创建控制台应用程序

  如果使用Windows8.1或Windows8,在“开始”屏幕上输入VisualStudio,在“搜索结果”窗格中点击“VisualStudio2013”。

  注意要在Windows8和Windows8.1上查找应用程序,可在“开始”屏幕上直接输入应用程序名称。搜索结果窗格自动出现。

  将启动VisualStudio2013并显示如下图所示的起始页(取决于所用的VisualStudio2013版本,你的起始页可能不同)。

  注意首次运行VisualStudio2013会出现对话框,提示选择默认开发环境设置。VisualStudio2013根据首选开发语言自动调整。集成开发环境(IntegratedDevelopmentEnvironment,IDE)的各个对话框和工具将根据所选的语言创建默认设置。请从列表中选择“VisualC#开发设置”,然后单击“启动VisualStudio”按钮。稍候片刻,就会出现VisualStudio2013IDE。

  如果使用Windows7,按以下步骤启动VisualStudio2013。

  1.单击“开始”按钮,选择“所有程序”|“MicrosoftVisualStudio2013”程序组。

  2.在MicrosoftVisualStudio2013程序组中,单击MicrosoftVisualStudio2013。

  随后会启动VisualStudio2013并显示起始页。

  注意为避免重复,以后不管使用的操作系统是什么,需要启动VisualStudio2013时都只是简单地说“启动VisualStudio”。

  ?执行以下任务,新建控制台应用程序。

  1.在“文件”菜单中选择“新建”|“项目”。

  随后出现下图所示的“新建项目”对话框。对话框列出了一些模板,可以在这些模板的基础上构建应用程序。模板按照语言和应用程序类型进行分类。

  2.在左侧窗格选择“模板”下的“VisualC#”。在中间窗格,验证顶部组合框显示的是“.NETFramework4.5”,然后单击“控制台应用程序”图标。

  3.在“位置”文本框中输入C:\Users\YourName\Documents\MicrosoftPress\VisualCSharpStepbyStep\Chapter1。将YourName替换成具体的Windows用户名。

  注意为节省篇幅,以后将路径C:\Users\YourName\Documents简称为Documents或“文档”文件夹。

  提示如果指定的文件夹不存在,VisualStudio2013会自动创建。

  4.在“名称”文本框中输入TestHello(覆盖默认名称)。

  5.确定已勾选“为解决方案创建目录”复选框,然后单击“确定”按钮。

  VisualStudio将使用“控制台应用程序”模板创建项目,并显示项目初始代码,如下图所示。

  可利用屏幕顶部的菜单栏访问编程环境提供的各项功能。和其他所有Windows程序一样,菜单和命令可通过键盘或鼠标访问。菜单栏下方是工具栏,提供了一系列快捷按钮,用于执行最常用的命令。

  占据IDE大部分的“代码和文本编辑器”窗口显示了源文件的内容。编辑含有多个文件的项目时,每个源文件都有自己的“标签”,标签中显示的是源文件的文件名。单击标签,即可在“代码和文本编辑器”中显示对应的源文件。

  最右侧是“解决方案资源管理器”,如下图所示。

  “解决方案资源管理器”显示了项目相关文件的名称以及其他内容。在其中双击文件名,即可在“代码和文本编辑器”中显示该文件的内容。

  开始写代码之前,可以检查一下“解决方案资源管理器”列出的文件,它们是作为项目的一部分由VisualStudio2013创建的。

  解决方案“TestHello”解决方案文件位于最顶级。每个应用程序都有这样的一个文件。解决方案中可包含一个或多个项目,VisualStudio2013利用这个解决方案文件对项目进行组织。在Windows资源管理器中查看“文档”文件夹下的MicrosoftPress\VisualCSharpStepbyStep\Chapter1\TestHello文件夹,会发现该文件的实际名称是TestHello.sln。

  TestHello这是C#项目文件。每个项目文件都引用一个或多个包含项目源代码以及其他内容(比如图片)的文件。一个项目的所有源代码都必须使用相同的编程语言。在Windows资源管理器中,该文件的实际名称是TestHello.csproj,保存在“文档”文件夹下的MicrosoftPress\VisualCSharpStepbyStep\Chapter1\TestHello\TestHello子文件夹中。

  Properties这是TestHello项目中的一个文件夹。展开它会发现AssemblyInfo.cs文件。AssemblyInfo.cs是特殊文件,用于为程序添加“特性”(attribute),如作者姓名和程序编写日期等。还可利用一些特性修改程序运行方式。至于具体如何利用这些特性,已经超出了《微软技术丛书:Visual C# 2013从入门到精通》的范围。

  引用该文件夹包含对已编译好的代码库的引用。C#代码编译时会转换成库,并获得唯一名称。.NETFramework将这种库称为程序集(assembly)。开发人员利用程序集打包自己开发的有用功能,并分发给其他程序员,以便他们在自己的程序中使用。展开“引用”文件夹会看到VisualStudio2013在项目中添加的一组默认程序集引用。利用这些程序集可访问.NETFramework的大量常用功能。《微软技术丛书:Visual C# 2013从入门到精通》将通过练习帮助你熟悉这些程序集。

  App.config应用程序配置文件。由于是可选的,所以并非肯定存在该文件。可在其中指定设置,让应用程序在运行时修改其行为,比如修改运行应用程序的.NETFramework版本。以后将更深入地探讨该文件。

  Program.csC#源代码文件。项目最初创建时,“代码和文本编辑器”显示的就是该文件,稍后要在该文件中为控制台应用程序编写代码。它包含VisualStudio2013自动生成的一些代码,稍后将详细讨论。

  1.2编写第一个程序

  Program.cs文件定义了Program类,其中包含Main方法。在C#中,所有可执行代码都必须在方法中定义,而方法必须从属于类或结构。类将在第7章讨论,结构将在第9章讨论。

  Main方法指定程序的入口。该方法在Program类中必须定义为静态方法,否则应用程序运行时,.NETFramework可能不把它视为起点。方法将在第3章讨论,静态方法将在第7章讨论。

  重要提示C#区分大小写。Main的首字母必须大写。

  后面的练习将写一些代码在控制台中显示消息“HelloWorld!”,将生成并运行这个HelloWorld控制台应用程序,并学习如何使用命名空间对代码元素进行分区。

  利用“智能感知”(IntelliSense)写代码

  1.在显示了Program.cs文件的“代码和文本编辑器”中,将光标定位到Main方法的左大括号{后面,按Enter键另起一行。

  2.在新的一行中,键入单词Console,这是由应用程序引用的程序集提供的一个类。Console类提供了在控制台窗口中显示消息和读取键盘输入的方法。

  键入单词Console的首字母C时,会显示一个“智能感知”列表(如下图所示)。

  其中包含在当前上下文中所有有效的C#关键字和数据类型。可继续输入其他字母,也可在列表中滚动并用鼠标双击Console项。还有一个办法是,一旦键入Cons,智能感知列表就会自动定位到Console这一项,此时按Tab键或Enter键即可选中并输入它。

  现在的Main方法如下所示:

  staticvoidMain(string[]args)

  {

  Console

  }

  注意Console是内建的类。

  3.紧接着单词Console输入句点。随后会出现另一个智能感知列表,其中显示了Console类的方法、属性和字段。

  4.在列表中向下滚动,直到选中WriteLine,再按Enter键。还有一个办法,继续输入字符W,r,i,t,e,L,直到WriteLine被自动选定再按Enter键。

  随后,智能感知列表关闭,WriteLine方法添加到源代码文件中。现在的Main方法如下所示:

  staticvoidMain(string[]args)

  {

  Console.WriteLine

  }

  5.输入起始圆括号(。随后出现智能感知提示。

  其中显示了WriteLine方法支持的参数。WriteLine是重载方法。换言之,Console类包含多个名为WriteLine的方法,实际上有19个之多。可用WriteLine方法的不同版本输出不同类型的数据(重载方法将在第3章讨论)。现在的Main方法如下所示:

  staticvoidMain(string[]args)

  {

  Console.WriteLine(

  }

  提示单击上下箭头或者按上下键切换WriteLine的不同重载版本。

  6.输入结束圆括号),再加一个分号。现在的Main方法如下所示:

  staticvoidMain(string[]args)

  {

  Console.WriteLine();

  }

  7.移动光标,在WriteLine后面的圆括号之间输入字符串"HelloWorld!",引号也包含在内。现在的Main方法如下所示:

  staticvoidMain(string[]args)

  {

  Console.WriteLine("HelloWorld!");

  }

  提示好习惯是先连续输入一对匹配的字符,例如(和)以及{和},再在其中填写内容。如果先填写内容,很容易忘记输入结束字符。

  智能感知图标

  在类名后输入句点,“智能感知”将显示类的每个成员的名称。每个成员名称左侧有一个指示成员类型的图标。下表总结了图标及其代表的类型。

  图标含义

  方法(第3章)

  属性(第15章)

  类(第7章)

  结构(第9章)

  枚举(第9章)

  扩展方法(第9章)

  接口(第13章)

  委托(第17章)

  事件(第17章)

  命名空间(本章下一节)

  在不同上下文中输入代码时,还可能看到其他“智能感知”图标。

  一些代码包含两个正斜杠,后跟一些文本,这称为注释。它们会被编译器忽略,但对开发人员来说非常有用,因为可以用注释来记录代码实际采取的操作。示例如下:

  Console.ReadLine();//等待用户按Enter键

  从两个正斜杠到行末,所有文本都被编译器忽略。也可用/*添加多行注释。编译器将跳过它之后的一切内容,直到遇到*/(可能出现在多行之后)。建议尽量使用详细的注释对自己的代码进行编档。

  ?生成并运行控制台应用程序

  1.在“生成”菜单中,单击“生成解决方案”。

  这样会编译C#代码并生成可运行的程序。在“代码和文本编辑器”下方会显示“输出”窗口。

  提示如果“输出”窗口没有出现,请在“视图”菜单中选择“输出”。

  “输出”窗口显示如下所示的消息,告诉你程序的编译过程。

  1>------已启动生成:项目:TestHello,配置:DebugAnyCPU------

  1>TestHello->C:\Users\zj\Documents\MicrosoftPress\VisualCSharpStepByStep\Chapter1\TestHello\TestHello\bin\Debug\TestHello.exe

  ==========生成:成功1个,失败0个,最新0个,跳过0个==========

  程序错误在“错误列表”窗口中显示。下图显示了忘记在WriteLine语句的HelloWorld!文本后输入结束引号的后果。注意,一个错误有时可能导致多个编译错误。

  提示在“错误列表”窗口中双击错误,光标会移到导致错误的代码行。另外,输入一行不能编译的代码,VisualStudio会在其下方显示一条红色的波浪线。

  仔细按前面的步骤操作,就不应出现任何错误或警告,程序应成功生成。

  提示生成前不必存盘,因为“生成解决方案”命令会自动存盘。在“代码和文本编辑器”的标签中,文件名后的星号表明自上次存盘以来文件内容已发生修改。

  2.在“调试”菜单中,单击“开始执行(不调试)”。

  随即打开命令窗口,程序开始运行。显示“HelloWorld!”消息,程序等待用户按任意键继续(如下图所示)。

  注意“请按任意键继续…”提示由VisualStudio自动生成,不必专门为此写代码。如果使用“调试”菜单中的“启动调试”命令运行程序,应用程序也会运行,但命令窗口在显示“HelloWorld!”后立即关闭,不会停下来等着按键。

  3.确认当前焦点是这个命令窗口,按Enter键(或其他任意键)。

  命令窗口关闭,并返回VisualStudio。

  4.在“解决方案资源管理器”中单击TestHello项目(而不是解决方案),然后单击“解决方案资源管理器”工具栏中的“显示所有文件”按钮(如下图所示)。如果看不到该按钮,单击>>按钮来找到它。

  随后,Program.cs文件的上方会显示bin和obj。这两项直接对应于项目文件夹(\MicrosoftPress\VisualCSharpStepbyStep\Chapter1\TestHello\TestHello)中的bin和obj文件夹。这些文件夹在生成应用程序时由VisualStudio创建,包含应用程序的可执行版本,以及用于生成和调试应用程序的其他文件。

  5.在“解决方案资源管理器”中展开bin文件夹。

  随即显示另一个名为Debug的文件夹。

  注意也许还会看到一个名为Release的文件夹。

  6.在“解决方案资源管理器”中展开Debug文件夹。

  随即显示更多子项,其中TestHello.exe是编译好的程序。在“调试”菜单中选择“开始执行(不调试)”运行的就是它。其他文件包含了在调试模式下运行程序(选择“调试”菜单中的“启动调试”命令)要由VisualStudio2013使用的信息。

  1.3使用命名空间

  前面的例子只是很小的程序。然而,小程序可能很快变成大程序。随着程序规模的增大,两个问题随之而来。首先,代码越多,就越难理解和维护。其次,更多代码通常意味着更多类和方法,要求你跟踪更多名称。随着名称越来越多,极有可能因为两个或多个名称冲突而造成项目无法生成。例如,可能试图创建两个同名的类。如果程序引用了其他开发人员写的程序集,后者同样使用了大量名称,这个问题将变得更严重。

  过去,程序员通过为名称添加某种形式的限定符前缀来解决名称冲突问题。但这并不是好的方案,因为它不具有扩展性。名称变长后,打字的时间就增多了,还要花更多时间来反复阅读令人费解的长名字,真正花在写软件上的时间就少了。

  命名空间(namespace)可解决这个问题,它为类这样的东西创建容器。同名类在不同命名空间中不会混淆。可用namespace关键字在TestHello命名空间中创建Greeting类,如下所示:

  namespaceTestHello

  {

  classGreeting

  {

  ...

  }

  }

  然后在自己的程序中使用TestHello.Greeting引用Greeting类。如果有人在不同命名空间(例如NewNamespace)中也创建了Greeting类,并把它安装到你的机器上,你的程序仍能正常工作,因为程序使用的是TestHello.Greeting类。另一名开发者的Greeting类要用NewNamespace.Greeting进行引用。

  作为好习惯,所有类都应该在命名空间中定义,VisualStudio2013环境默认使用项目名称作为顶级命名空间。.NETFramework类库(FCL)也遵循这个约定,它的每个类都在一个命名空间中。例如,Console类在System命名空间中。这意味着它的全名实际是System.Console。

  .......

前言/序言

  
  MicrosoftVisualC#是一种功能强大、使用简单的语言,主要面向需要使用Microsoft.NETFramework来创建应用程序的开发者。它在C++和MicrosoftVisualBasic的基础上去芜存菁,最终形成了一种更加清晰、更富有逻辑的语言。C#1.0于2001年亮相。几年后随着C#2.0和VisualStudio2005的问世,语言新增了几个重要功能,包括泛型、迭代器和匿名方法等。随同MicrosoftVisualStudio2008发布的C#3.0添加了更多功能,包括扩展方法、Lambda表达式以及语言集成查询(LanguageIntegratedQuery,LINQ)。2010年发布的C#4.0继续增强,改善了与其他语言和技术的互操作性。新增功能包括具名参数和可选参数,另外还有dynamic类型(指示语言的“运行时”对对象进行晚期绑定)。在随同C#4.0发布的.NETFramework中,最重要的新功能就是“任务并行库”(TaskParallelLibrary,TPL)。可用TPL构建具有良好伸缩性的应用程序,从而快速和简单地发挥出多核处理器的潜力。C#5.0则通过async修饰符和await操作符提供了对异步任务的原生支持。
  Windows8是Microsoft近年来最具革命性的一款操作系统。新操作系统支持高度交互式的应用程序,它们能相互分享和协作,还能轻松连接云端服务。VisualStudio2012开发环境使这些强大功能变得容易使用,大量新向导和增强显著提高了开发效率。VisualStudio2012、Windows8和C#5.0三剑客提供了完善的平台和工具集来帮助你开发下一代的、功能强大的、直观的而且容易移植的应用程序。
  在认真倾听了开发人员的反馈之后,Microsoft对UI进行了一些修订并发布了Windows8.1,同时发布的还有VisualStudio2013,其中包含VisualStudio2012的累积更新并增添了一些新功能来进一步提升编程效率。虽然对VisualStudio的许多更新都不大,而且C#语言本身没有发生任何变化,但我们认为由于Windows8.1在UI上发生了变化,所以有必要对《微软技术丛书:Visual C# 2013从入门到精通》进行一番修订,这正是这一版的来由。
  注意《微软技术丛书:Visual C# 2013从入门到精通》原版基于VisualStudio2013TechnicalPreview和Windows8.1。中文版则针对VisualStudio2013正式版和Windows8.1Update1进行了全面修订。
  《微软技术丛书:Visual C# 2013从入门到精通》面向的读者
  《微软技术丛书:Visual C# 2013从入门到精通》假定你要使用VisualStudio2013和.NETFramework4.5.1学习基础的C#编程知识。学完《微软技术丛书:Visual C# 2013从入门到精通》后,会对C#有一个全面、透彻的理解,会用它开发反应灵敏的、可伸缩的、能在Windows操作系统上运行的应用程序。
  C#5.0应用程序在Windows7、Windows8和Windows8.1上都能生成和运行。但Windows7和Windows8在UI上有很大区别。另外,Windows8.1对UI模型进行了一些修改,造成使用新功能的应用程序在Windows8上可能无法运行。因此,《微软技术丛书:Visual C# 2013从入门到精通》的设计是第I到第III部分的练习和示例在三种环境中都能运行,但第IV部分专注于Windows8.1开发,强调了如何针对新平台开发交互式程序。
  《微软技术丛书:Visual C# 2013从入门到精通》不面向的读者
  《微软技术丛书:Visual C# 2013从入门到精通》面向刚开始用C#进行开发的人士,重点放在C#语言上面。《微软技术丛书:Visual C# 2013从入门到精通》不涉及企业级Windows应用程序的开发技术,比如ADO.NET、ASP.NET、WindowsCommunicationFoundation或者WorkflowFoundation。要了解这些方面的知识,可参考《从入门到精通》系列的其他书籍,包括《MicrosoftASP.NET4从入门到精通》、《MicrosoftADO.NET4从入门到精通》以及《MicrosoftWindowsCommunicationFoundation4从入门到精通》。
  《微软技术丛书:Visual C# 2013从入门到精通》的组织
  《微软技术丛书:Visual C# 2013从入门到精通》分为以下四大部分。
  第I部分“VisualC#和VisualStudio2013概述”介绍了C#语言的核心语法,还演示了VisualStudio编程环境。
  第II部分“理解C#对象模型”深入探讨如何用C#创建和管理新类型,以及如何管理这些类型引用的资源。
  第III部分“用C#定义可扩展类型”全面讨论了如何利用C#语言元素来构建能在多个应用程序中重用的类型。
  第IV部分“使用C#构建专业Windows8.1应用程序”描述了Windows8.1编程模型,以及如何用C#为新模型构建交互式应用程序。
  注意虽然第IV部分面向Windows8.1,但第23章和第24章的一些概念还是适用于Windows7和Windows8应用程序。
  导读
  《微软技术丛书:Visual C# 2013从入门到精通》帮助你掌握多个基本领域的开发技能。无论刚开始学习编程,还是从另一种语言(C、C++、Java或VisualBasic)转向C#,《微软技术丛书:Visual C# 2013从入门到精通》都能提供帮助。参考下表找到最佳起点。
  读者类型
  面向对象编程的新手
  步骤
  1.按照“范例代码”一节的步骤安装练习文件
  2.顺序阅读第Ⅰ部分、第Ⅱ部分和第Ⅲ部分
  3.有了一定经验后,如果有兴趣,继续完成第Ⅳ部分的学习
  续表
  读者类型
  熟悉C语言等过程编程语言,但新涉足C#
  步骤
  1.按照“范例代码”一节的步骤安装练习文件
  2.略读前6章来获得对C#和VisualStudio2013的大致印象,重点阅读第7~22章
  3.阅读第Ⅳ部分了解如何构建可伸缩的Windows8.1应用程序
  从面向对象语言C++或Java等迁移到C#1.按照“范例代码”一节的步骤安装练习文件
  2.略读前7章,获得对C#语言和VisualStudio2013的大致印象,
  重点阅读第8~22章
  3.阅读第Ⅳ部分了解如何构建可伸缩的Windows8.1应用程序
  从VisualBasic迁移到C#1.按照“范例代码”一节的步骤安装练习文件
  2.顺序阅读第Ⅰ部分、第Ⅱ部分和第Ⅲ部分
  3.Windows8.1应用程序开发请阅读第Ⅳ部分
  4.阅读每章末尾的“快速参考”小节,了解C#特有的构造做完所有练习后再将《微软技术丛书:Visual C# 2013从入门到精通》作为参考书使用的读者1.根据目录寻找特定主题的信息2.阅读每章最后的“快速参考”,查看语法和技术归纳《微软技术丛书:Visual C# 2013从入门到精通》大多数章节都通过实际的例子方便读者巩固刚学到的知识。无论感兴趣的是哪个主题,都注意先下载并安装好范例代码。
  《微软技术丛书:Visual C# 2013从入门到精通》的约定和特色《微软技术丛书:Visual C# 2013从入门到精通》通过一些约定来增强内容的可读性,以便于读者理解。
  每个练习都用编号的操作步骤来完成。
  “注意”等特色段落提供了成功完成一个步骤需要了解的额外信息或替代方案。
  要求读者输入的文本加粗显示。
  两个键名之间的加号(+)意味着必须同时按下这两个键。例如,“按Alt+Tab键”意味着按住Alt键不放,然后按Tab键。
  描述菜单操作时,采取“文件”|“打开”的形式,意思是从“文件”菜单中选择“打开”命令。
  系统需求
  为了完成《微软技术丛书:Visual C# 2013从入门到精通》的练习,需准备以下硬件和软件:
  Windows7(x86或x64),Windows8(x86或x64),Windows8.1(x86或x64),WindowsServer2008R2(x64),WindowsServer2012(x64)或者WindowsServer2012R2(x64)
  注意VisualStudio2013的WindowsStore模板不可用于Windows8,Windows7,WindowsServer2012或WindowsServer2008R2。要使用这些模板,或者要执行生成WindowsStore应用的那些练习,操作系统必须是Windows8.1或WindowsServer2012R2。
  VisualStudio2013(除VisualStudioExpressforWindows8.1之外的任意版本)
  注意可以使用VisualStudioExpress2013forWindowsDesktop,但就只能执行《微软技术丛书:Visual C# 2013从入门到精通》的Windows7版本的练习。不可用它执行第IV部分的练习。
  1.6GHz或更快的处理器(推荐2GHz以上)32位操作系统至少1GBRAM,64位至少2GBRAM。在虚拟机中运行再加512MB10GB剩余硬盘空间支持DirectX9的显示卡,1024×768或更高分辨率。Windows8.1推荐1366×768或更高分辨率DVD-ROM驱动器(如果从DVD安装VisualStudio)下载软件和范例代码需要Internet连接此外,还需要以管理员身份安装和配置Visualtudio2013。
  范例代码
  《微软技术丛书:Visual C# 2013从入门到精通》的配套网络资源包含练习时会用到的范例代码。使用这些范例代码,读者不再需要浪费时间创建和练习无关的文件。借助于这些练习文件和课程中描述的步骤,读者可以在实践中学习,这是迅速掌握并记住新的编程技能的一种简单而高效的方式。
  按以下步骤在计算机上安装《微软技术丛书:Visual C# 2013从入门到精通》配套代码。
  1.在InternetExplorer或其他浏览器的地址栏中输入transbot.ys168.com。
  2.点击和《微软技术丛书:Visual C# 2013从入门到精通》对应的目录,并下载源代码文件压缩包。
  3.将压缩包解压到计算机的“文档”文件夹。如下图所示。
  使用练习文件
  《微软技术丛书:Visual C# 2013从入门到精通》每一章都解释了在什么时候以及如何使用必要的练习文件。需要使用练习文件的时候,书中会给出相应的指示,帮助你打开正确的文件。
  如果想知道所有细节,可以参见下表,其中列出了《微软技术丛书:Visual C# 2013从入门到精通》要用到的所有VisualStudio2013项目和解决方案,它们以文件夹的形式进行分组以便查找。练习通常会为同一个项目提供初始文件和完成之后的版本。有的练习提供Windows7和Windows8.1两个版本,操作步骤会针对不同操作系统给出相应的指示。已完成的项目存储在带有-Complete后缀的文件夹中。
  注意如果使用Windows7、Windows8、WindowsServer2012或WindowsServer2008R2,按照Windows7的步骤操作。如果使用Windows8.1或WindowsServer2012R2,按照Windows8.1的步骤操作。
  项目名称说明
  第1章
  TextHello作为第一个项目,它指导你创建一个简单程序来显示欢迎文本
  WPFHello使用WPF技术在窗口中显示欢迎文本
  第2章
  PrimitiveDataTypes演示如何使用基元类型来声明变量,如何向变量赋值,如何在窗口中显示值
  MathsOperators演示了算术操作符(+、–、*、/、%)
  第3章
  Methods改进上个项目的代码,体会如何使用方法来建立代码的结构
  DailyRate指导你写自己的方法,执行方法,使用VisualStudio2013调试器来单步执行方法
  使用可选参数的DailyRate演示如何让方法获取可选参数,如何使用具名参数来调用方法
  第4章
  Selection演示如何用嵌套if语句实现复杂逻辑,例如比较两个日期的相等性
  SwitchStatement这个简单的程序使用一个switch语句将字符转换成相应的XML形式
  第5章
  WhileStatement用while语句逐行读取源文件,在Windows窗体的文本框中显示每一行
  DoStatement使用do语句将十进制数转换成八进制续表
  项目名称说明
  第6章
  MathsOperators对第2章的MathsOperators项目进行改进,试验会造成程序执行失败的各种未处理的异常。然后,用try和catch关键字使应用程序更健壮,防止因为错误输入或操作而失败
  第7章
  Classes演示如何定义自己的类,为它添加公共构造器、方法和私有字段;还演示如何用new关键字创建类的实例,如何定义静态方法和字段
  第8章
  Parameters演示值类型和引用类型的参数的区别,还演示如何使用ref和out关键字
  第9章
  StructsAndEnums定义结构来表示日期
  第10章
  Cards使用数组来建模纸牌游戏中的一手牌
  第11章
  ParamsArrays演示如何使用params关键字使方法能接受任意数量的参数
  第12章
  Vehicles用继承创建简单的交通工具类,还演示如何定义虚方法
  ExtensionMethod演示如何为int类型创建扩展方法,允许将整数从十进制转换成其他进制
  第13章
  DrawingUsingInterfaces实现图形绘图包的一部分。用接口定义要由几何图形对象公开并实现的方法
  DrawingUsingAbstractClasses扩展了DrawingUsingInterfaces项目,将几何图形对象的常用功能集成到抽象类中
  第14章
  GarbageCollectionDemo演示如何使用Dispose模式实现异常安全的资源清理
  第15章
  DrawingUsingProperties扩展第13章的DrawingUsingAbstractClasses项目,用属性将数据封装到类中
  AutomaticProperties演示如何为类创建自动属性,如何用它们初始化类的实例
  第16章
  Indexers该项目使用了两个索引器,一个根据姓名查找电话号码,另一个根据电话号码查找姓名
  第17章
  BinaryTree演示如何使用泛型生成类型安全的结构,可包含任何类型的元素
  BuildTree演示如何使用泛型实现类型安全的方法,可获取任何类型的参数
  第18章
  Cards升级第10章的代码,演示如何用集合建模一手牌
  续表
  项目名称说明
  第19章
  BinaryTree演示如何实现泛型IEnumerator接口,为泛型Tree类创建枚举器
  IteratorBinaryTree用迭代器为泛型Tree类生成枚举器
  第20章
  Delegates演示如何通过委托调用方法,将方法的逻辑和调用方法的应用程序分开
  DelegatesWithEvent演示如何用事件提醒对象发生了某事,如何捕捉事件并执行需要的处理
  第21章
  QueryBinaryTree演示如何通过LINQ查询从二叉树对象获取数据
  第22章
  ComplexNumbers定义新类型来建模复数,并为这种类型实现常用的操作符
  第23章
  GraphDemo生成并在WPF窗体上显示复杂图表。使用单线程执行计算
  GraphDemoWithTasks创建多个任务,并行执行图表计算
  ParallelGraphDemo使用Parallel类对创建和管理任务的过程进行抽象
  GraphDemoWithCancellation中途得体地取消任务
  ParallelLoop演示何时不该使用Parallel类创建和运行任务
  第24章
  GraphDemo修改第23章的同名项目,使用async关键字和await操作符异步计算图表数据
  PLINQ使用并行任务,用PLINQ查询数据
  CalculatePI使用统计学采样计算PI的近似值。使用了并行任务
  第25章
  CustomersWithoutScalableUI使用默认Grid控件进行AdventureWorks公司的Customers应用程序的UI布局。控件使用绝对定位,屏幕分辨率和设备大小改变时,不会自动伸缩
  CustomersWithScalableUI使用嵌套Grid控件并定义行和列来实现控件的相对定位。这个版本的UI能自动适应不同的屏幕分辨率和设备大小。但在贴靠视图中表现不佳
  CustomersWithAdaptiveUI对上一个可伸缩UI进行扩展。使用VisualStateManager检测切换到贴靠视图的事件,并相应修改控件布局
  CustomersWithStyles
  使用XAML样式更改字体和背景图片
  第26章
  DataBinding使用数据绑定在UI中显示从数据源获取的客户资料;还演示了如何实现INotifyPropertyChanged接口,从而允许UI更新客户资料,并将改动发送回数据源
  ViewModel通过实现Model-View-ViewModel模式,将UI同数据源访问逻辑分开
  Search实现Windows8.1搜索合约,按名字或姓氏搜索客户
  续表
  项目名称说明
  第27章
  DataService这个解决方案包含一个Web应用程序来提供RESTWeb服务,使Customers应用程序能从SQLServer数据库获取客户数据。RESTWeb服务通过由实体框架创建的实体模型来访问数据库
  UpdatableViewModel这个解决方案中的Customers项目包含一个扩展的ViewModel,它提供许多命令,允许UI通过RESTWeb服务插入和更新客户资料


其他推荐