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