明明白白学C#大学霸

明明白白学C#

明明白白学C#

明明白白学C#

目  录

第0章  准备工作… 1

0.1  C#是什么… 1

0.1.1  什么是语言… 1

0.1.2  什么是编程语言… 2

0.1.3  编程语言的分类… 2

0.1.4  什么是C#编程语言… 3

0.2  C#可以做什么… 3

0.2.1  开发普通软件… 4

0.2.2  开发网站… 4

0.2.3  开发游戏——Unity. 5

0.2.4  开发iOS/Android/Window Phone手机应用App. 5

0.3  如何学习C#. 6

0.3.1  搭建开发环境… 6

0.3.2  建立第一个程序——Hello World. 10

0.3.3  重要术语回顾… 13

0.3.3  后续学习的路… 13

第1章  数据表示… 14

1.1  数据的直观表示——字面量… 14

1.1.1  整型字面量… 14

1.1.2  浮点型字面量… 16

1.2  文本字面量… 16

1.2.1  字符和字符串的写作规范… 17

1.2.2  特殊的字符和字符串——转义字符… 17

1.2.3  更全面的表达方式——ASCII表… 18

1.2.4  避免转义字符——@.. 19

1.2.5  字符串长度… 19

1.3  数据的指代表示——变量… 20

1.3.1  为什么使用指代表示… 20

1.3.2  C#的命名规范… 21

1.3.3  对变量命名… 22

1.4  数据类型… 23

1.4.1  数值类型… 23

1.4.2  文本类型… 24

1.4.3  其他类型… 25

1.5  定义一个变量… 25

1.6  一种特殊的变量——常量… 25

1.7  小结… 26

第2章  变量和数值关联… 27

2.1  赋值… 27

2.1.1  静态赋值——固定值… 27

2.1.2  动态赋值——可变值… 27

2.2  验证变量与数值的关联… 28

2.2.1  验证的手段… 28

2.2.2  验证整数赋值… 30

2.2.3  验证实数赋值… 31

2.2.4  验证文本赋值… 33

2.3  总结数据转换规律… 34

2.3.1  自动转换… 34

2.3.2  强制转换… 36

2.4  小结… 37

第3章  运算——运算符与表达式… 38

3.1  表达式… 38

3.2  简单赋值运算符… 39

3.3  算术运算符… 39

3.3.1  写作规范… 39

3.3.2  算术运算符… 40

3.3.3  算术运算中的特殊情况… 41

3.4  特殊的算术运算符… 43

3.4.1  操作数为1的特殊运算——自增自减运算… 43

3.4.2  操作数为2的特殊运算——移位运算… 46

3.4.3  位逻辑运算符… 48

3.4.4  复合的赋值运算符… 51

3.5  其他运算符… 53

3.6  运算符的优先级和结合顺序… 53

3.6.1  运算符的优先级… 53

3.6.2  结合顺序… 55

3.7  小结… 55

第4章  语句和语句块… 56

4.1  语句… 56

4.1.1  如何构成语句… 56

4.1.2  语句的种类… 57

4.1.3  特殊的语句… 59

4.2  语句块的构成与作用… 60

4.2.1  语句块的构成… 60

4.2.2  使用语句块的好处… 62

4.2.3  局部变量… 62

4.3  语句的执行顺序… 63

4.3.1  顺序执行的执行过程… 63

4.3.2  单步调试… 64

4.4  选择执行… 67

4.4.1  选择执行的依据——条件… 67

4.4.2  单值条件表达式… 68

4.4.3  双值条件表达式… 68

4.4.4  多条件表达式… 69

4.5  选择执行的种类… 71

4.5.1  单选择if 71

4.5.2  双选择if…else. 73

4.5.3  多选择if…else…if 74

4.5.4  switch语句… 76

4.6  循环执行… 81

4.6.1  为什么要使用循环… 81

4.6.2  当型循环while. 82

4.6.3  直到型循环… 84

4.6.4  更安全的循环——for循环… 86

4.7  跳转语句… 87

4.7.1  continue语句只适用于循环… 88

4.7.2  break语句可用于任何封闭的代码… 90

4.8  多层嵌套语句… 91

4.8.1  选择语句嵌套… 91

4.8.2  循环语句嵌套… 93

4.8.3  深层嵌套可以使用goto语句… 94

4.9  局部变量… 95

4.9.1  局部变量的声明… 96

4.9.2  局部变量的作用域和生存周期… 97

4.9  小结… 98

第5章  函数… 99

5.1  为什么有函数… 99

5.1.1  拆分代码… 99

5.1.2  简化代码… 102

5.2  函数的组成… 104

5.2.1  语句块标识——函数名… 104

5.2.2  语句块构成——函数体… 105

5.2.3  语句块结果——返回值… 105

5.2.4  定义一个函数… 108

5.3  函数的使用… 109

5.4  函数通用化——参数… 111

5.4.1  为什么有参数… 111

5.4.2  普通参数——传值… 114

5.4.3  引用传递… 116

5.4.4  传出参数… 118

5.5  特殊的函数… 120

5.5.1  Main()函数… 120

5.5.2  函数的重载… 123

5.6  可供多个函数调用的变量… 124

5.7  复杂的函数调用… 125

5.6.1  递归调用… 125

5.6.2  嵌套调用… 128

5.8  小结… 129

第6章  “类”… 130

6.1  为什么需要类… 130

6.1.1  简洁代码… 130

6.1.2  大项目的分工合作的问题… 133

6.1.3  标识符命名的问题… 134

6.2  如何划分类… 135

6.3  如何定义类… 137

6.3.1  代码段标识——类名… 138

6.3.2  代码段——类体… 139

6.3.3  定义一个类… 140

6.3.4  Main()的归属地… 141

6.4  类的使用… 141

6.4.1  调用类自身的成员… 141

6.4.2  调用另一个类的成员… 144

6.5  类之间的成员访问——访问修饰符… 145

6.5.1  只有自己能访问——私有… 145

6.5.2  谁都能访问——公有… 146

6.5.3  为类定义可访问性… 147

6.6  特殊的类的定义——嵌套类… 152

6.6.1  嵌套类的定义和使用方法… 152

6.6.2  嵌套类的访问权限… 155

6.6.3  总结… 157

6.7  小结… 157

 

明明白白学C#下册

目  录

第7章  对象… 1

7.1  为什么要使用对象… 1

7.2  如何定义对象… 4

7.2.1  为对象命名… 4

7.2.2  定义一个对象… 5

7.2.3  对象和类的区别… 5

7.3  程序中成员的归属… 6

7.3.1  字段的归属… 6

7.3.2  方法的归属… 7

7.4  如何使用对象… 8

7.4.1  使用对象操作字段… 8

7.4.2  使用对象操作方法… 9

7.4.3  特殊的对象指代——this 10

7.5  特殊的类方法… 12

7.5.1  构造方法… 12

7.5.2  析构方法… 19

7.5.3  比较构造方法与析构方法… 20

7.6  小结… 20

第8章  属性… 21

8.1  属性的由来… 21

8.2  属性的构成… 23

8.2.1  属性的命名… 23

8.2.2  属性的类型和访问修饰符… 24

8.2.3  属性的机制… 24

8.2.4  定义一个属性… 26

8.3  属性的应用… 27

8.3.1  判断赋值正确性… 27

8.3.2  只读/只写属性… 29

8.3.3  方便代码后期维护… 31

8.3.4  同步处理相关字段… 33

8.3.5  自动实现属性… 34

8.3.6  属性不绑定字段… 36

8.4  小结… 37

第9章  继承… 38

9.1  继承的由来… 38

9.1.1  代码重用、简化代码… 38

9.1.2  扩展功能… 40

9.1.3  继承的定义格式… 42

9.2  介于private与public之间的访问权限——protected. 43

9.3  子类从父类得到了什么… 45

9.3.1  字段的可继承性… 45

9.3.2  方法的可继承性… 48

9.3.3  属性的可继承性… 52

9.3.4  父类的静态成员… 56

9.4  子类从父类得不到构造方法和析构方法… 57

9.4.1  子类不能继承构造方法… 57

9.4.2  隐式调用基类构造方法… 58

9.4.3  显式调用基类构造方法… 59

9.4.4  建议为基类声明无参构造方法… 62

9.4.5  析构方法… 63

9.5  继承的特点… 64

9.5.1  单继承… 64

9.5.2  可传递… 65

9.5.3  可添、不可删… 66

9.6  继承的面向对象特性——重写… 66

9.6.1  类的虚拟成员… 66

9.6.2  重写虚成员… 73

9.6.3  比较方法的重载、重写与隐藏… 76

9.7  小结… 77

第10章  C#的特殊成员… 78

10.1  继承链引发的问题… 78

10.2  虚方法在继承链中的作用… 80

10.2.1  想方设法解决继承链引发的问题… 81

10.2.2  密封方法——取消成员的虚效果… 84

10.2.3  密封类… 87

10.3  继承中父类对子类添加限制… 89

10.3.1  部分限制——抽象方法… 89

10.3.2  限制升级——抽象类… 92

10.3.3  使用抽象类… 94

10.3.4  抽象类总结… 97

10.4  抽象类的升级——接口… 98

10.4.1  为什么要使用接口… 98

10.4.2  接口的定义… 98

10.4.3  接口的实现——接口继承接口… 101

10.4.4  接口的实现——类继承接口… 103

10.4.5  比较接口和抽象类… 109

10.5  继承中的特殊情况——运算符重载… 110

10.5.1  为什么重载运算符… 110

10.5.2  如何重载运算符… 110

10.5.3  一元运算符的重载… 111

10.5.4  二元运算符的重载… 115

10.5.5  转换运算符的重载… 121

10.5.6  不能重载的运算符… 124

10.6  小结… 126

第11章  委托和事件… 127

11.1  为什么使用委托… 127

11.2  委托的声明和使用… 128

11.2.1  声明委托… 128

11.2.2  创建委托对象… 130

11.2.3  向委托注册方法… 131

11.2.4  使用委托… 133

11.2.5  匿名方法… 135

11.3  委托的合并与拆分… 138

11.3.1  合并委托… 139

11.3.2  合并委托的条件… 144

11.3.3  拆分委托… 146

11.4  委托的特殊使用——用于回调方法… 147

11.5  匹配不精准——委托协变和逆变… 148

11.6  一种特殊的委托——事件… 152

11.6.1  事件的声明… 152

11.6.2  订阅事件与取消订阅事件… 153

11.6.3  引发事件… 155

11.6.4  使用事件… 156

11.7  小结… 161

第12章  特殊的系统类——数组和字符串… 162

12.1  如何定义数组… 162

12.1.1  初识数组… 162

12.1.2  Array类… 163

12.1.3  定义一个数组… 164

12.1.4  初始化数组… 166

12.1.5  遍历数组… 172

12.2  数组有哪些类型… 176

12.2.1  一维数组… 176

12.2.2  二维数组… 176

12.2.3  多维数组… 181

12.2.4  交错数组… 183

12.3  数组的特殊使用… 192

12.3.1  作为参数… 192

12.3.2  作为返回值… 201

12.4  静态数组… 203

12.4.1  静态数组的常用属性概览… 203

12.4.2  静态数组的常用方法概览… 203

12.4.3  获取数组的秩… 204

12.4.4  获取数组长度… 205

12.4.5  获取元素的索引… 211

12.4.6  获取或设置元素的值… 213

12.4.7  清除数组元素… 216

12.4.8  复制数组… 217

12.4.9  复制数组元素… 219

12.4.10  反转数组元素… 222

12.4.11  对数组排序… 224

12.5  动态数组… 225

12.5.1  如何定义一个动态数组… 226

12.5.2  常用属性和方法… 226

12.5.3  如何添加、删除元素… 227

12.5.4  清空数组… 233

12.6  字符串的本质——String对象… 234

12.6.1  了解String类… 235

12.6.2  String类提供的字段、属性和方法… 235

12.6.3  获取字符串长度… 236

12.6.4  插入字符串… 237

12.6.5  移除字符串… 238

12.6.6  替换字符串… 239

12.6.7  连接字符串… 241

12.6.8  获取子串… 243

12.6.9  格式化字符串… 244

12.7  可变字符串… 250

12.7.1  了解StringBuilder类… 250

12.7.2  StringBuilder类提供的属性和方法… 251

12.7.3  插入字符串… 252

12.7.4  追加字符串… 253

12.7.5  移除字符串… 255

12.9  小结… 256

第13章  结构和枚举… 257

13.1  认识结构… 257

13.1.1  为什么要用结构… 257

13.1.2  如何定义结构… 258

13.1.3  结构可以包含的成员… 260

13.1.4  如何使用结构… 263

13.2  结构的继承特性… 265

13.3  结构和类的区别… 268

13.4  枚举… 271

13.4.1  为什么要使用枚举… 271

13.4.2  定义枚举… 272

13.4.3  如何使用枚举… 274

13.4.4  枚举的基类Enum.. 276

13.4.5  枚举的分类… 279

13.5  使用枚举需要注意一些问题… 281

13.5.1  尽量不给枚举元素提供显式的值… 282

13.5.2  尽量使得零是枚举的有效值… 282

13.6  小结… 285

第14章  索引器… 286

14.1  数组的启发… 286

14.1.1  只关注值… 286

14.1.2  批量处理… 287

14.2  构建简单索引器… 289

14.2.1  为什么要使用索引器… 289

14.2.2  索引器的构成… 290

14.2.3  数组字段应用… 293

14.2.4  非数组字段应用… 295

14.3  构建复杂索引器… 298

14.3.1  字符串索引… 299

14.3.2  多维索引器… 301

14.3.3  设定索引器的上下限… 304

14.4  索引器的扩展应用… 307

14.4.1  索引器的重载… 308

14.4.2  接口索引器… 310

14.4.3  索引器在继承中的应用… 317

14.5  索引器对比… 321

14.5.1  索引器VS数组… 322

14.5.2  索引器VS属性… 322

14.5  小结… 322

Comments are closed.