《Learning hard C#学习笔记》PDF下载

  • 购买积分:11 如何计算积分?
  • 作  者:李志著
  • 出 版 社:北京:人民邮电出版社
  • 出版年份:2015
  • ISBN:9787115382924
  • 页数:291 页
图书介绍:本书内容从零开始,由浅入深地讲解了C#的基础语法和最主要最重要的特性,同时,讲解和分析了在开发中必须需要掌握的技术要领和经验心得。带领初学者,迅速从一个C#开发的门外汉转换成一个掌握技术要领的开发人员。

第1章 你真的了解C#吗 1

1.1 什么是C# 1

1.1.1 C#语言的发展历程 1

1.1.2 C#能编写哪些应用程序 3

1.2 什么是.NET Framework 5

1.2.1 .NET Framework的组成 5

1.2.2 C#与.NET Framework的关系 7

1.2.3 C#代码的执行过程 8

1.3 归纳总结 9

第2章 来点C#的感觉 10

2.1 开发环境的搭建 10

2.2 创建“欢迎你”应用程序 13

2.2.1 创建控制台项目 13

2.2.2 编译和运行程序 15

2.2.3 对程序进行调试 18

2.3 归纳总结 19

第3章 打开C#的大门——C#语言基础 20

3.1 标识符和关键字 20

3.1.1 标识符 20

3.1.2 关键字 21

3.2 基础数据类型 22

3.2.1 数值类型 22

3.2.2 字符串类型 23

3.2.3 枚举类型 24

3.2.4 结构体类型 25

3.2.5 数组类型 25

3.3 变量和常量 26

3.3.1 变量的使用 27

3.3.2 变量的作用域 27

3.3.3 常量 27

3.4 运算符和表达式 28

3.4.1 运算符 28

3.4.2 运算符优先级 28

3.4.3 运算符重载 29

3.4.4 表达式 31

3.5 C#中的语句 31

3.5.1 条件语句 31

3.5.2 循环语句 34

3.5.3 跳转语句 37

3.6 归纳总结 39

第4章 C#中的类 40

4.1 什么是类 40

4.2 C#中如何定义一个类 40

4.3 类的成员 41

4.3.1 字段 41

4.3.2 属性 42

4.3.3 方法 45

4.3.4 构造函数 48

4.3.5 析构函数 52

4.3.6 索引器 52

4.4 类实例化 54

4.5 类与结构体的区别 55

4.6 归纳总结 57

第5章 首先需要明确的——C#中的面向对象编程 58

5.1 封装 58

5.2 继承 59

5.2.1 C#中的继承 60

5.2.2 密封类 61

5.2.3 子类的初始化顺序 61

5.3 多态 62

5.3.1 使用virtual和override关键字实现方法重写 63

5.3.2 阻止派生类重写虚成员 65

5.3.3 使用新成员隐藏基类成员 65

5.4 所有类的父类:System.object 67

5.5 归纳总结 67

第6章 电脑有USB接口,C#也有接口 68

6.1 什么是接口 68

6.2 如何使用接口来编程 68

6.2.1 接口的定义 68

6.2.2 继承接口 70

6.2.3 调用接口中的方法 71

6.3 显式接口实现方式 72

6.4 接口与抽象类 76

6.5 面向对象编程的应用 76

6.6 归纳总结 79

第7章 透过外表看本质——IL语言 80

7.1 什么是IL 80

7.2 先睹为快——从“Hello World”看IL 80

7.2.1 工具的介绍 80

7.2.2 使用工具查看IL代码 80

7.3 教你看懂IL代码 85

7.3.1 IL基本类型 85

7.3.2 变量的声明 86

7.3.3 基本运算 86

7.3.4 IL中的流程控制 87

7.4 归纳总结 88

第8章 正式进入C#的世界——委托 89

8.1 C#委托是什么 89

8.2 委托的使用 90

8.3 为什么要引入委托 91

8.4 委托的本质 93

8.5 委托链 96

8.5.1 委托链的使用 96

8.5.2 从委托链中移除委托 97

8.6 归纳总结 98

第9章 事件揭秘 99

9.1 什么是事件 99

9.2 使用事件 99

9.2.1 如何定义事件 99

9.2.2 订阅和取消事件 100

9.2.3 扩展EventArgs类 104

9.3 事件的本质 106

9.4 归纳总结 108

第10章 深入理解类型 109

10.1 C#中的类型——值类型和引用类型 109

10.1.1 什么是值类型和引用类型 109

10.1.2 值类型与引用类型的区别 110

10.1.3 两大类型间的转换——装箱与拆箱 113

10.2 参数传递问题剖析 116

10.2.1 值类型参数的按值传递 116

10.2.2 引用类型参数的按值传递 118

10.2.3 string引用类型参数按值传递的特殊情况 119

10.2.4 值类型和引用类型参数的按引用传递 121

10.3 归纳总结 122

第11章 使类型参数化——泛型 123

11.1 泛型是什么 123

11.2 C#2.0为什么要引入泛型 124

11.3 全面解析泛型 128

11.3.1 类型参数 128

11.3.2 泛型中的静态字段和静态函数问题 129

11.3.3 类型参数的推断 132

11.3.4 类型参数的约束 133

11.4 归纳总结 136

第12章 可空类型、匿名方法和迭代器 137

12.1 可空类型 137

12.1.1 可空类型简介 137

12.1.2 你知道空合并操作符吗 139

12.1.3 可空类型的装箱和拆箱操作 141

12.2 匿名方法 143

12.2.1 什么是匿名方法 143

12.2.2 对变量捕捉过程的剖析 145

12.3 迭代器 148

12.3.1 迭代器的简介 148

12.3.2 C#1.0中如何实现迭代器 148

12.3.3 C#2.0简化了迭代器的实现 150

12.3.4 迭代器的执行过程 153

12.4 归纳总结 153

第13章 C#的春天——C#3.0中智能的编译器 154

13.1 自动实现的属性 154

13.2 隐式类型 156

13.2.1 隐式类型的局部变量 156

13.2.2 隐式类型数组 158

13.3 对象集合初始化器 159

13.4 匿名类型 162

13.5 归纳总结 165

第14章 不一样的编码风格——Lambda表达式 166

14.1 Lambda表达式简介 166

14.1.1 Lambda表达式的演变过程 166

14.1.2 Lambda表达式的使用 167

14.2 表达式也有树结构——表达式树 169

14.2.1 动态地构造一个表达式树 170

14.2.2 通过Lambda表达式来构造表达式树 171

14.2.3 如何把表达式树转换成可执行代码 172

14.3 归纳总结 173

第15章 使类的扩展更简单——扩展方法 174

15.1 什么是扩展方法 174

15.2 扩展方法的使用 174

15.2.1 定义扩展方法 174

15.2.2 调用扩展方法 177

15.3 编译器如何发现扩展方法 177

15.4 空引用也可调用扩展方法 182

15.4.1 拿例子说话 182

15.4.2 空引用上调用扩展方法揭秘 183

15.5 归纳总结 184

第16章 数据操作So easy——LINQ解析 185

16.1 LINQ是什么 185

16.2 LINQ好在哪里 186

16.2.1 查询表达式 186

16.2.2 使用Linq to Objects查询集合 187

16.2.3 使用Linq to XML查询XML文件 188

16.3 理解LINQ的本质 191

16.4 归纳总结 193

第17章 小改动大作为——C#4.0中的微小改动 194

17.1 可选参数和命名实参 194

17.1.1 可选参数 194

17.1.2 命名实参 195

17.1.3 COM互操作的福音 196

17.2 泛型的可变性 198

17.2.1 协变性 198

17.2.2 逆变性 199

17.2.3 协变和逆变的注意事项 200

17.3 归纳总结 201

第18章 静中有动——动态类型 202

18.1 动态类型简介 202

18.2 C#为什么要引入动态类型 202

18.2.1 可以减少强制类型转换的使用 203

18.2.2 调用Python等动态语言 203

18.3 动态类型约束 203

18.3.1 不能用来调用扩展方法 203

18.3.2 委托与动态类型间不能做隐式转换 204

18.3.3 不能调用构造函数和静态方法 204

18.3.4 类型声明和泛型类型参数 204

18.4 实现自己的动态行为 204

18.4.1 使用ExpandoObject来实现动态行为 205

18.4.2 使用DynamicObject来实现动态行为 205

18.4.3 使用IDynamicMetaObject-Provider接口来实现动态行为 206

18.5 归纳总结 207

第19章 你必须掌握的多线程编程 208

19.1 多线程编程必备知识 208

19.1.1 进程与线程的概念 208

19.1.2 线程的调度 209

19.1.3 线程也分前后台 210

19.2 线程的容器——线程池 213

19.2.1 线程池 213

19.2.2 通过线程池来实现多线程 214

19.2.3 协作式取消线程池线程 215

19.3 线程同步 216

19.3.1 多线程程序中存在的隐患 216

19.3.2 使用监视器对象实现线程同步 218

19.3.3 线程同步技术存在的问题 221

19.4 归纳总结 222

第20章 不得不说的异步编程 223

20.1 什么是异步编程 223

20.2 同步方式存在的问题 223

20.3 异步编程模型(APM) 226

20.4 异步编程模型——EAP 231

20.5 TAP又是什么 238

20.6 让异步编程So easy——C#5.0中的async和await 242

20.7 归纳总结 245

第21章 出师前闯关训练第一关——文件操作 246

21.1 文件操作核心类 246

21.1.1 File和FileInfo类 246

21.1.2 Directory和DirectoryInfo类 248

21.2 流 250

21.3 对文件进行异步操作 252

21.4 归纳总结 254

第22章 出师前闯关训练第二关——网络编程 255

22.1 网络编程基础知识 255

22.1.1 网络分层总览 255

22.1.2 各层所使用的协议 256

22.1.3 网络程序的工作机制 257

22.2 基于TCP的网络程序的实现 258

22.2.1 TCP的工作过程 258

22.2.2 基于TCP的简单通信程序的实现 260

22.3 基于UDP的网络程序的实现 272

22.3.1 UDP的工作原理 272

22.3.2 UDP的优势 274

22.3.3 基于UDP的简单通信程序的实现 274

22.4 归纳总结 278

第23章 出师前闯关训练最后一关——使用GDI+实现属于你的截图工具 279

23.1 前期准备 279

23.1.1 什么是GDI+ 279

23.1.2 笔、画笔和颜色 279

23.2 动手实现你的QQ截图工具 281

23.2.1 实现思路 281

23.2.2 瞧瞧最终结果 290

23.3 归纳总结 291