Head First C#(第三版)中文版

This document was uploaded by one of our users. The uploader already confirmed that they had the permission to publish it. If you are author/publisher or own the copyright of this documents, please report to us by using this DMCA report form.

Simply click on the Download Book button.

Yes, Book downloads on Ebookily are 100% Free.

Sometimes the book is free on Amazon As well, so go ahead and hit "Search on Amazon"

《Head First C#(第三版)》《Head First C#(第三版)》是学习使用C#、XAML、.NET Framework和Visual Studio编程的jue佳途径,会让你有全新的学习体验。这专门针对你的大脑特别制作,从第1章开始就会把你牢牢吸引住,你会在第1章中构建一个功能完备的视频游戏。接下来,你会学习类和面向对象编程、绘制图形和动画、用LINQ查询数据,还可以串行化到文件。所有这些都是通过构建游戏、解决谜题和动手建立工程获得的。学完所有这些内容之后,你将成为一个高水平的C#程序员,而且这将是一个轻松愉悦的学习过程!

Author(s): Andrew Stellman & Jennifer Greene
Series: O'Reilly Head First系列(中译本)
Edition: 3
Publisher: 中国电力出版社
Year: 2016

Language: Chinese
Pages: 948
Tags: C#

封面
前言
目录(概览)
引子xxxi
1用C#构建应用:快速构建酷炫程序!
2都只是代码:幕后的故事
3对象:我们的方法:让代码更合理
4类型与引用:现在是上午1〇:〇〇,你知道你的数据在哪里吗?
C#实验室1:赛狗日
5封装:让你的隐私……属于你个人
6继承:对象的家族树
7接口与抽象类:让类信守承诺
8枚举与集成:存储人量数据
9读写文件:为我保存最后一个字节!
C#实验室2:冒险游戏
10用XAML设计Windows store应用:让你的应用更上一个台阶
11async、await和数据契约串行化:抱歉打断一下
12异常处理:救火太老套
13CAPTAIN AMAZING:对象之死
14用LINQ查询数据和构建应用:掌控你的数据
15事件与委托:没有监视时,代码在做什么
16用MVVM模式建立应用架构:好应用的正反面
C#实验室3:入侵者
17额外奖励的工程!构建一个Windows Phone游戏
i附录其他:这本书最想介绍的11大内容
索引
引子
让你的大脑学习C#。你想坐下来学点东西,可是你的大脑却总在帮倒 忙,一直在告诉你学这些不重要。你的大脑在想,“还是把空间留给 更重要的事情吧,比方说要躲开哪些野兽,还有光着身子滑雪不太好 吧。”那么你该如何骗过大脑,让它认为如果不学会C#你将无法生活?
谁适合看这本书?xxxii
我们也知道你的大脑在想什么。xxxiii
元认知:有关思考的思考XXXV
让你的大脑就范xxxvii
看这本书需要些什么xxxviii
重要说明xxxix
技术审校团队xl
致谢xli
1用C#构建应用:快速构建酷炫程序!
为什么你要学C#
C#和Visual Studio IDE让很多事情变得容易
你在Visual Studio中这样做
Visual Studio会为你这样做
外星人入侵!
只有你能拯救地球
以下是你要构建的目标
从一个空应用开始
为页面建立网格
在网格中增加控件
使用属性改变控件的外观
控件让游戏动起来
你已经为游戏做好了准备
接下来要做什么
增加一个具体做事情的方法
为方法填入代码
完成方法,运行程序
这是你目前为止所做的
增加定时器管理游戏
让Start按钮起作用
运行程序看看进展如何
增加代码让控件与玩家交互
把人拖到敌人身上,结束游戏
现在可以真正玩你的游戏了
让敌人看起来更像外星人
增加一个启动画面和瓷块
发布你的应用
使用Remote Debugger®狱应用
开始远程调试
2都只是代码:幕后的故事
当你这么做时……
……IDE会这么做
程序从哪里来
IDE帮你编写代码
程序剖析
两个类可以在同一个命名空间
程序使用变量处理数据
C#使用我们熟悉的数学符号
使用调试工具査看变量的变化
循环就是周而复始反复完成一个动作
if/else语句做决策
从头开始构建一个应用
让各个按钮做些事情
建立条件,査看条件是否为true
Windows桌面应用很容易构建
面向Windows Desktop重构你的应用
你的桌面应用知道从哪里开始
可以改变程序的入口点
在IDE中完成修改,同时也在修改你的代码
3对象:我们的方法:让代码更合理
对象:我们的方尚!
Mike如何考虑问题
Mike的汽车导航系统如何考虑问题
Mike的Navigator类有一些设置和改变路线的方法
使用前面所学的知识构建一个使用类的程序
Mike有一个好主意
Mike可以使用对象来解决他的问题丨
使用类来建立对象
由一个类创建新对象时,称为这个类的一个实例
更好的解决方案……利用对象!
实例使用字段来跟踪状态
来创建一些实例!
感谢内存
程序要做什么
使用合适的类名和方法名使代码更直观
为类提供一个自然的结构
类图可以帮助你组织类,让它们更有意义
构建一个类来处理某些人
为这些人创建一个工程
建立一个窗体与这些人交互
还有更容易的方法来初始化对象
类型与引用
4类型与引用:现在是上午1〇:〇〇,你知道你的数据在哪里吗?
变量的类型决定了它能存储哪种数据
变量就像数据外卖杯
10磅数据装进5磅的包里
即使数字的大小合适,也不能随意赋给任意变量
强制转换一个过大的值时,C#会自动调整
C#自动完成一些强制类型转换
调用一个方法时,实参必须与形参的类型兼容
调试里程计算器
结合=和操作符
对象也使用变量
用引用变量指示对象
引用就像对象的标签
如果没有任何引用,对象就会被垃圾回收
多个引用及其副作用
两个引用意味着有两个途径来改变一个对象的数据
一种特殊情况:数组丨
数组还可以包含一组引用变量
欢迎品尝Sloppy Joe餐厅物美价廉的三明治!
对象使用引用交谈
前人未至之境
构建一个打字游戏
控件也是对象,与其他对象一样
C#实验室1 : 赛狗日
规范:构建一个赛狗模拟系统
完成的作品
5 封装: 让你的隐私……属于你个人
Kathleen是一个策划人
预算工具要做些什么?
你要为Kathleen构建一个程序
Kathleen 的测试
每个选择都应当单独计算
很容易无意识地误用对象
封装意味着保证类中的一些数据是私有的
使用封装控制对类方法和字段的访问
但是RealName字段真的得到了保护吗?
私有字段和方法只能从类的内部访问
封装保证数据干净
属性使封装更容易
构建一个应用测试Farmer类
使用自动属性完成这个类
如果想改变单位饲料数呢?
使用构造函数初始化私有字段
6 继承: 对象的家族树
Kathleen也承办生日聚会
需要一个 BirthdayParty 类
构建聚会规划工具2.0版
还有一个问题……如果人数超过12,聚会能额外收取$100吗?
类使用继承时,只需要写一次代码
建立类模型:从一般到特定
如何设计一个动物园模拟系统?
使用继承避免子类中出现重复代码
不同的动物会发出不同的声音
想想如何对动物分组
创建类层次结构
每个子类都扩展其基类
使用冒号继承一个基类
我们知道继承会为子类增加基类的字段、属性和方法……
子类可以覆盖方法来改变或替换它继承的方法
只要能使用基类,就可以使用它的某个子类
子类可以隐藏超类中的方法
使用override和virtual关键字来继承行为
子类可以使用base关键字访问其基类
基类有构造函数,子类也需要有构造函数
现在准备完成Kathleen的任务!
构建一个蜂巢管理系统
如何构建蜂巢管理系统
7 接口与抽象类: 让类信守承诺
再来看蜂巢问题
可以使用继承为不同类型的蜜蜂创建相应的类
接口告诉类必须实现某些方法和属性
使用interface关键字定义接口
现在可以创建两项工作都胜任的NectarStinger实例
实现接U的类必须包括接口的所有方法
使用接口做个小练习
不能实例化接口,不过可以引用接口
接口引用类似对象引用
可以使用“is”査看一个类是否实现了某个接口
接口可以继承其他接口
RoboBee 4000可以完成工蜂的工作,而且不需要消耗珍贵的蜂蜜 306 CoffeeMaker 也是一个 Appliance
对象和接口的向上强制转换
向下强制转换允许你把家用电器变回咖啡机
接口也可以向上和向下强制转换
不只是公共和私有
访问修饰符改变可见性
有些类不能实例化
抽象类就像类和接口之间的一个过渡
正像我们说的,有些类不能实例化
抽象方法没有方法体
致命的死亡菱形!
多态表示一个对象可以有多种不同形态
8 枚举与集成: 存储大量数据
字符串并不适于存储所有类型的数据
Enum枚举允许处理一组合法值
枚举允许用名字表示数字
数组很难处理
利用List可以很容易地存储……任何事物的集合
List比数组更灵活
List会动态伸缩
泛型可以存储任何类型
集合初始化方法类似于对象初始化方法
列表很容易,但排序可能很困难
IComparable帮助列表对鸭子排序
使用IComparer告诉List如何排序
创建比较对象的一个实例
IComparer可以完成复杂的比较
覆盖ToStringO方法让对象自我描述
更新foreach循环,让Duck和Card自行显示
写foreach循环时,就是在使用IEnumerable
使用丨Enumerable可以向上强制转换整个列表
可以建立你自己的重载方法
使用字典存储键和值
字典功能通览
构建一个使用字典的程序
还有更多集合类型……
队列是HFO---先进先出
栈是LIFO---后进先出
9 读写文件: 为我保存最后一个字节!
.NET使用流读写数据
不同的流读写不同的数据
FileStream向文件读写字节
3个简单步骤向文件写文本
恶魔Swindler又要发动一个邪恶计划
使用两个对象读写
数据可以经过多个流
使用内置对象弹出标准对话框
对话框也是WinForms控件
使用内置File和Directory类处理文件和目录
使用文件对话框打开和保存文件(只需要几行代码)
IDisposable确保适当地撤销对象
利用using语句避免文件系统错误
使用switch语句做出正确的选择
增加一个重载的Deck〇构造函数,从文件读入一副牌
对象串行化时,它引用的所有对象也要串行化……
利用串行化可以一次读写整个对象图
.NET使用Unicode存储字符和文本
C#可以使用字节数组移动数据
使用BinaryWriter写二进制数据
还可以手动读写串行化文件
找出文件的差别,并使用这些信息修改文件
处理二进制文件可能很麻烦
使用文件流构建一个十六进制转储工具
使用Stream.ReadQ从流读取字节
C#实验室2 : 冒险游戏
规范:构建一个冒险游戏
好戏就要开始r!
10 用XAML设计Windows store应用: 让你的应用更上一个台阶
Brian在运行Windows
Windows Forms使用IDE建立的一个对象图
使用IDE研究对象图
Windows Store应用使用XAML创建UI对象
把Go Fish!窗体重新设计为一个Windows Store应用页面 500 页面布局从控件开始
行和列可以调整来适应页面大小
使用网格系统建立应用页面布局
数据绑定将XAML页面与类连接起来
XAML控件可以包含文本……以及更多
使用数据绑定为Sloppy Joe构建一个更棒的菜单
使用静态资源在XAML中声明对象
使用数据模板显示对象
INotify PropertyChanged允许绑定对象发送更新
修改MenuMaker来通知GeneratedDate属性有变化
11 async、 await和数据契约串行化: 抱歉打断一下
Brian的文件遇到点麻烦
Windows Store应用使用await来更好地响应
使用FilelO类读写文件
构建一个不那么简单的文本编辑器
数据契约是对象数据的一个抽象定义
使用async方法査找和打开文件
KnownFolders帮助你访问标准文件夹
整个对象图都串行化到XML
将Guy对象通过流写入应用的本地文件夹
测试你的Guy Serializer应用
使用Task从一个async方法调用另一个async方法
为Brian构建一个新的借口管理应用
分离页面、借口和借口管理系统
为借口管理系统创建主页面
为主页面增加应用条
构建 ExcuseManager 类
增加页面的底层代码
12 异常处理: 救火太老套
Brian希望他的借口是移动的
程序抛出一个异常时,.NET会生成一个Exception对象
Brian的代码出了意外
所有异常对象都继承了 Exception
调试工具可以帮助跟踪和避免代码中的异常
使用IDE的调试工具找出借口管理系统哪里出了问题
哎呀,代码还是有问题……
用try和catch处理异常
想调用的方法有风险会发生什么?
使用调试工具跟踪try/catch流
如果有些代码总要运行,可以使用一个finally块
使用Exception对象得到问题的有关信息
使用多个catch块处理多种类型的异常
一个类抛出异常,可以由另一个类中的方法捕获这个异常
避免大量问题的一种简便方法:
利用using可以免费使用try和finally
避免异常:实现〖Disposable完成自己的清理
史上最糟糕的catch块:全能型+注释
关于异常处理的一些简单想法
13 CAPTAIN AMAZING: 对象之死
你的最后机会……对象的最终化方法
最终化方法到底什么时候运行?
Dispose()处理using,最终化方法处理垃圾回收
最终化方法不能依赖于稳定性
让对象在DisposeO中自行串行化
struct看起来像是一个对象.
……但不是对象
值要复制,引用要指定
struct是值类型;对象是引用类型
栈与堆:再谈谈内存
用out参数让方法返回多个值
使用ref修饰符按引用传递
使用可选参数设置默认值
需要不存在的值时可以使用可为空的类型
可为空的类型可以让程序更徤壮
“Captain” Amazing.还不够
扩展方法为现有类增加新行为
扩展一个基本类型:string
14 用LINQ查询数据和构建应用: 掌控你的数据
Jimmy是Captain Amazing的忠实粉丝.
……不过他的收藏杂乱无章
LINQ可以从多个来源获取数据
已经为LINQ建立了.NET集合
LINQ使查询很容易
LINQ很简单,但是査询不一定简单
Jimmy得到一些帮助
开始为Jimmy构建一个应用
使用new关键字创建匿名类型
LINQ是个多面手
为Jimmy的应用增加新査询
LINQ可以将结果合并分组
将Jimmy漫画书的价格分组
使用join将两个集合合并到一个序列
Jimmy省了一大笔钱
使用语义变焦导航数据
为Jimmy的应用增加语义变焦
你让Jimmy非常高兴
IDE的Split App模板可以帮你构建应用导航数据
15 事件与委托: 没有监视时, 代码在做什么
希望你的对象自己考虑问题吗?
不过对象怎么知道要做出响应呢?
出现一个事件时……对象会监听
一个对象产生事件,其他对象监听……
然后,其他对象处理这个事件
把各个部分连起来
IDE会为你自动创建事件处理方法
泛型EventHandler允许你定义自己的事件类型
Windows Forms使用多个事件
一个事件,多个处理方法
Windows Store应用使用事件完成进程生命期管理
为Jimmy的漫画书应用增加进程生命期管理
XAML控件使用路由事件
创建一个应用来研究路由事件
连接事件发送者和事件接收者
委托代表一个具体的方法
委托的实际使用
对象可以订购事件……
使用回调控制谁来监听
回调只是一种使用委托的方法
可以对MessageDialog命令使用回调
使用委托利用 Windows Setting charm
16 用MVVM模式建立应用架构: 好应用的正反面
Head First Basketball Conference篮球联赛需要一个应用
不过对于如何构建这个应用他们能达成一致吗?
为绑定还是为处理数据而设计?
MVVM允许你针对绑定以及数据进行设计
使用MVVM模式开始构建篮球赛阵容应用
用户控件允许你创建你自己的控件
裁判需要一个秒表
MVVM意味着要考虑应用的状态
开始构建秒表应用的模型
事件提醒应用的其余部分有状态发生变化
为一个简单的秒表构建视图
增加秒表视图模型
转换器自动转换值完成绑定
转换器可以处理多种不同类型
可视化状态使控件对改变做出响应
使用 DoubleAnimation 完成 double 值动画
使用对象动画完成对象值的动画
使用同样的视图模型构建一个模拟秒表
UI控件也可以用C#代码实例化
C#也可以构建“真正的”动画
创建一个用户控件来完成图片动画
让你的蜜蜂在页面上飞起来
使用 ItemsPanelTemplate 将控件绑定到 Canvas
祝贸你!(不过还没有结束……)
C#实验室3 : 入侵者
经典的视频游戏
还有很多可以做……
17 额外奖励的工程! 构建一个Windows Phone游戏
Bee Attack!
开始之前……
i 附录其他: 这本书最想介绍的11 大内容
#1.关于Windows Store
#2.基础知识
#3.命名空间和程序集
#4.使用BackgroundWorker保证WinForms的响应性
#5. Type类和GetType()
#6.相等性' IEquatable和Equals()
#7.使用yield return创建可枚举的对象
#8.重构
#9.匿名类型、匿名方法和lambda表达式
#10. LINQ to XML
#11 • Windows表现基础库
你知道C#和.NET Framework的这些功能吗?