《HeadFirstC# 中文版》PDF下载

  • 购买积分:20 如何计算积分?
  • 作  者:安德鲁·斯泰尔曼等编著
  • 出 版 社:北京:中国电力出版社
  • 出版年份:2009
  • ISBN:9787508387994
  • 页数:738 页
图书介绍:本书是学习面向对象编程、C#和Visual Studio IDE的绝佳途径。本书是针对你的大脑特别制作的,涵盖了C# 3.0和Visual Studio 2008,讲授了从垃圾回收到扩展方法以至双缓冲动画等多方面的知识。还介绍了C#的最新热门的语法LINQ,用以查询.NET集合、SQL数据库等不同来源的数据。

1 C#助你快速开发 10分钟(甚至更短时间)内轻松搞定可视化应用 2

为什么你要学C 2

C#和Visual Studio IDE使很多问题变得容易 3

帮CEO实现无纸化 4

开始构建程序之前,先要了解用户的需求 5

以下是你要实现的目标 6

你在Visual Studio中这样做…… 8

Visual Studio会为你这样做…… 8

开发用户界面 12

Visual Studio,在幕后 14

补充自动生成的代码 15

已经可以运行你的应用程序了 16

我们需要一个数据库来存储信息 18

为Contact List应用创建数据库表 20

联系卡片上的空白就是People表中的列 22

完成表的构建 25

建立数据图表,以便应用访问 26

将卡片数据插入到数据库中 28

利用一个数据源连接窗体与数据库对象 30

为窗体增加数据库驱动控件 32

好程序使用起来应当简单明了 34

如何把你的应用变成所有人的应用 37

为用户提供应用 38

革命尚未成功:测试安装 39

你已经构建了一个完整的数据驱动应用程序 40

2 都只是代码 幕后的故事 44

当你这么做时…… 44

……IDE会这么做 45

程序从何而来 46

IDE帮你编写代码 48

当在IDE中做修改时,同时也在修改你的代码 50

程序剖析 52

程序知道从哪里开始 54

可以改变程序的入口点 56

两个类可以在同一个命名空间中 61

程序使用变量处理数据 62

C#使用了我们熟悉的数学符号 64

循环就是周而复始反复完成一个动作 65

开始编写代码 66

if/else语句做决策 67

建立条件,并查看条件是否为true 68

3对象:我们的方向! 让代码更合理 86

Mike如何考虑他的问题 86

Mike的汽车导航系统如何考虑他的问题 87

Mike的Navigator类有一些设置和修改路线的方法 88

使用前面所学构建一个简单的应用程序 89

Mike有一个好主意 90

Mike可以使用对象来解决他的问题 91

使用类来建立对象 92

由一个类创建一个新对象时,称为该类的一个实例 93

更好的解决方案……源于对象! 94

实例使用字段来记录状态 98

创建一些实例! 99

感谢内存 100

程序要做什么 101

使用合适的类名和方法名使代码更直观 102

为类提供一个自然的结构 104

类图可以帮助你组织类,让它们更有意义 106

构建一个类来处理人 110

为他们创建一个项目 111

建立一个窗体与他们交互 112

初始化对象还有更容易的方法 115

关于设计直观类的一些想法 116

4类型与引用 现在是上午10:00,你知道你的数据在哪儿吗? 124

变量的类型决定了它能存储哪种数据 124

变量就像数据外卖杯 126

10磅数据装进5磅的包里 127

即使数字的大小合适,也不能随意赋给任意变量 128

对一个过大的值完成强制类型转换时,C#会自动对其进行调整 129

C#自动完成一些强制类型转换 130

调用一个方法时,变量必须与参数的类型匹配 131

结合=和操作符 136

对象也是变量 137

用引用变量指示对象 138

引用就像对象的标签 139

如果没有任何引用了,对象会被垃圾回收 140

多个引用及其副作用 142

两个引用意味着有两个途径来改变一个对象的数据 147

一种特殊情况:数组 148

数组还可以包含一组引用变量 149

欢迎品尝马虎Joe餐厅物美价廉的三明治! 150

对象使用引用彼此交谈 152

还没有对象 153

C#实验室1 赛狗日 164

规范:构建一个赛狗模拟系统 164

最终完成的作品 172

5封装 让你的隐私……属于你个人 174

Kathleen是一个策划人 174

预算工具要做些什么? 175

Kathleen的测试驱动 180

每个选择都应当单独计算 182

很容易无意识地滥用对象 184

封装意味着保证类中的一些数据是私有的 185

使用封装来控制对类的方法和字段的访问 186

但是realName字段真的得到了保护吗? 187

私有字段和方法只能从类的内部访问 188

实现类封装的几个主意 191

封装保证数据干净 192

属性使封装更容易 193

构建一个应用来测试Farmer类 194

使用自动属性完成这个类 195

如果想改变单位饲料数呢? 196

使用构造函数初始化私有字段 197

6继承 对象的家庭树 206

Kathleen也承办生日聚会 206

需要一个BirthdayParty类 207

还有一个问题……如果人数超过12,聚会能另外收取$100吗? 213

类使用继承时,只需写一次代码 214

建立类模型:从一般到特定 215

怎样设计一个动物园模拟系统? 216

使用继承来避免子类中出现重复代码 217

不同的动物会发出不同的声音 218

想想如何对动物分组 219

创建类层次体系 220

每个子类都扩展其基类 221

使用冒号继承基类 222

我们知道继承会为子类增加基类的字段、属性和方法…… 225

子类可以覆盖方法来改变或替换它继承的方法 226

只要能使用基类,就可以使用它的某个子类 227

子类可以使用base关键字访问其基类 232

如果基类有构造函数,子类也需要有构造函数 233

现在准备完成Kathleen交给的任务! 234

构建一个蜂巢管理系统 239

首先构建基本系统 240

使用继承扩展蜜蜂管理系统 245

7接口与抽象类 让类信守承诺 252

再来看蜂巢问题 252

可以使用继承为不同类型的蜜蜂创建相应的类 253

接口告诉类必须实现某些方法和属性 254

使用interface关键字定义接口 255

现在可以创建两项工作都胜任的NectarStinger实例 256

实现接口的类必须包括接口的所有方法 257

使用接口做个小练习 258

不能实例化接口,不过可以引用接口 260

接口引用类似于对象引用 261

可以使用“is”查看一个类是否实现了某个接口 262

接口可以继承其他接口 263

RoboBee 4000可以完成工蜂的工作,而且不需要消耗珍贵的蜂蜜 264

is指出一个对象实现了什么,as则告诉编译器如何看待一个对象 265

CoffeeMaker也是一个Appliance 266

对象和接口的向上强制转换 267

向下强制转换允许你把家用电器变回咖啡机 268

接口也可以向上和向下强制转换 269

不只是公共和私有 273

访问修饰符改变作用域 274

有些类始终不应实例化 277

抽象类就像类和接口之间的一个过渡 278

有些类不应实例化 280

抽象方法没有方法体 281

多态表示一个对象可以有多种不同形态 289

8枚举与集合 存储大量数据 310

字符串并非始终适用于存储各类数据 310

Enum允许枚举一组合法值 311

通过枚举,可以用名来表示数字 312

可以使用数组来创建一副牌…… 315

数组很难处理 316

利用List可以很容易地存储……任何事物的集合 317

List比数组更灵活 318

List会动态伸缩 321

List对象可以存储任何类型 322

集合初始化方法类似于对象初始化方法 326

下面来创建一个Duck列表 327

列表很容易,但排序可能很难 328

两种鸭子排序法 329

使用IComparer告诉List如何排序 330

创建比较对象的一个实例 331

IComparer可以完成复杂的比较 332

使用字典存储键和值 335

字典功能大纲 336

键和值也可以是不同的类型 337

可以建立你自己的重载方法 343

还有更多集合类型…… 355

队列是FIFO——先进先出 356

栈是LIFO——后进先出 357

C#实验室2 冒险游戏 364

规则:构建一个冒险游戏 364

好戏开始了! 484

9读写文件 保存了字节数组,就留住了一切 386

C#使用流读写数据 386

不同的流读写不同的数据 387

FileStream向文件写字节 388

读和写需要两个对象 393

数据可以经过多个流 394

使用内置对象弹出标准对话框 397

对话框也是对象 399

使用内置File和Directory类处理文件和目录 400

使用文件对话框打开和保存文件 403

IDisposable确保对象适当地撤销 405

利用using语句避免文件系统错误 406

写文件通常要做大量决策 412

使用switch语句做出正确的选择 413

增加一个重载Deck()构造函数,从文件读入一副牌 415

对象串行化时发生了什么? 417

到底什么是对象的状态?哪些需要保存? 418

对象串行化时,它引用的所有对象也要串行化…… 419

利用串行化可以一次读或写整个对象 420

如果希望类可以串行化,要用[Serializable]属性来标志 421

.NET自动将文本转换为Unicode 425

C#可以使用字节数组移动数据 426

使用Binary Writer写二进制数据 427

还可以手动读写串行化文件 429

StreamReader和StreamWriter就能胜任 433

10异常处理 救火太老套 440

Brian希望他的借口能够转移 440

程序抛出一个异常时,NET会生成一个Exception对象 444

Brian的代码做了出乎意料的事情 446

所有异常对象都继承自Exception 448

调试工具可以帮助跟踪和避免代码中的异常 449

使用IDE的调试工具准确找出借口管理系统中哪里出了问题 450

唉呀——代码还是有问题…… 453

用try和catch处理异常 455

想调用的方法有风险会导致什么结果? 456

使用调试工具完成try/catch流程 458

如果有些代码始终运行,可以使用一个finally块 460

使用Exception对象得到问题的有关信息 465

使用多个catch块处理多种类型的异常 466

一个类抛出异常,另一个类捕获异常 467

蜜蜂需要一个OutOfHoney异常 468

避免大量问题的一种简便方法:使用using,可以轻松实现try和finally 471

避免异常:实现IDisposable完成自己的清理 472

史上最糟糕的catch块:注释 474

临时方案是允许的(权宜之计) 475

关于异常处理的一些简单想法 476

Brian终于能度假了…… 481

11事件与委托 没有你的监视,代码自己在做什么 484

希望你的对象自己考虑问题吗? 484

不过一个对象怎么知道要做出响应呢? 484

出现一个事件时……对象会监听 485

一个对象产生事件,其他对象监听…… 486

然后,其他对象处理这个事件 487

把各部分连接起来 488

IDE会为你自动创建事件处理程序 492

之前创建的窗体都使用了事件 498

连接事件发送者和事件接收者 500

委托代表一个具体的方法 501

委托的实际演练 502

任何对象都可以订购公共事件…… 505

使用回调而不是事件,只向委托准确地关联一个对象 507

回调使用委托,而不是事件 508

12复习与预习 知识,能力,动手实践 516

你已经学了不少了,伙计 516

我们还成了不错的养蜂人 517

蜂巢模拟系统体系结构 518

构建蜂巢模拟系统 519

花的生与死 523

现在需要一个Bee类 524

填写Hive类 532

蜂巢的Go()方法 533

准备构建World 534

我们要构建一个基于轮的系统 535

为蜜蜂提供行为 542

主窗体告诉World调用Go()推进 544

可以使用World得到统计信息 545

定时器反复触发事件 546

定时器在后台使用了委托 547

下面处理蜜蜂分组 554

用集合来收集……数据 555

利用LINQ,可以很容易地处理数据库和集合中的数据 557

13控件与图片 应用的美化 564

你一直在使用控件与程序交互 564

窗体控件也只是对象 565

在体系结构中增加Renderer 568

控件很适合表示可视化显示元素 570

构建第一个动画控件 573

控件还需要撤销它们的控件! 577

UserControl是构建控件的简便方法 578

为项目增加蜂巢和花园窗体 582

构建Renderer 583

仔细考虑性能问题 590

使用一个Graphics对象调整Bitmap大小 592

图像资源存储在Bitmap对象中 593

使用System.Drawing自行控制图形化 594

GDI+图形化30秒之旅 595

使用Graphics在窗体上绘制图片 596

Graphics可以修正我们的透明问题…… 601

使用Paint事件固定图形 602

进一步分析窗体和控件如何自行重绘 605

双缓冲使动画看起来更平滑 608

双缓冲已经内置到窗体和控件中 609

使用Graphics对象和事件处理程序完成打印 614

PrintDocument处理打印对话框和打印预览窗口对象 615

14CAPTAIN AMAZING:对象之死 622

Captain Amazing,Objectville最出色的对象,正在追捕他的主要对手…… 622

你努力的最后机会……对象的最终化方法 628

最终化方法到底何时运行? 629

Dispose()处理using,最终化方法处理垃圾回收 630

最终化方法不能依赖于稳定性 632

让对象在Dispose()中自行串行化 633

与此同时,在Objectville大街上…… 636

struct看起来像是一个对象…… 637

……但没有放在堆上 637

复制值,指定引用 638

struct是值类型;对象是引用类型 639

栈与堆:再谈内存 641

Captain Amazing……不充分 645

扩展方法为现有类增加新行为 646

扩展一个基本类型:string 648

15LINQ 让数据在你的掌控之中 654

一个简单的项目…… 654

……但是到处都是数据 655

LINQ可以从多个来源取出数据 656

已经为LINQ建立了.NET集合 657

LINQ查询很容易 658

LINQ很简单,但是你的查询不一定简单 659

LINQ是个多面手 662

LINQ可以将结果合并分组 667

将Jimmy漫画书的价格合并分组 668

使用join将两个集合合并到一个查询 671

Jimmy省了很多钱 672

将LINQ连接到一个SQL数据库 674

使用一个join查询连接Starbuzz和Objectville 678

C#实验室3 入侵者 682

经典的视频游戏 682

还有很多可以做…… 701

i其他 本书最想介绍的5大内容 704

#1 LINQ to XML 704

#2重构 706

#3我们最喜欢的一些工具箱组件 708

#4控制台应用 710

#5Windows表现基础库 712

你知道C#和NET Framework的以下功能吗? 714