• <<易学C#>>全书目录


     

    经过一年之久的创作,我的新书<<易学C#>>终于出版了,目录如下:

    预备课:学习从这里开始 1
    1.软件=程序+文档 1
    2.程序起什么作用 2
    3.为何要面向对象 2
    4.什么是UML 3
    5..NET与C# 4
     谈微软公司的.NET战略 4
     C#的产生与特点 5
     C#与.NET的关系 6
    6.开启C#的钥匙——兴趣与正确的学习方法 7
    7.习题练习 8

    第1部分 C#与UML基础

    第1章 开篇经典——“Hello,World” 11
    1.1 Hello,World 11
    1.2 程序的结构分析 13
    1.2.1 命名空间 13
    1.2.2 类和类的方法 13
    1.2.3 程序的输入输出 14
    1.3 程序的执行起点——Main函数 14
    1.4 控制台的输入和输出 14
    1.4.1 控制台的输入:Read和ReadLine 15
    1.4.2 控制台的输出:Write和WriteLine 15
    1.5 程序的注释 15
    1.5.1 模块(类)注释规范 16
    1.5.2 类属性注释规范 16
    1.5.3 方法注释规范 16
    1.5.4 代码间注释规范 16
    1.6 习题练习 17
    第2章 数据类型和表达式 18
    2.1 数据类型简介 18
    2.2 值类型 19
    2.2.1 简单类型 19
    2.2.2 结构类型 22
    2.2.3 枚举类型 23
    2.3 引用类型 24
    2.4 null和void 24
    2.4.1 null 24
    2.4.2 void 24
    2.5 变量和常量 25
    2.5.1 变量 25
    2.5.2 常量 29
    2.6 运算处理 29
    2.6.1 算术运算 30
    2.6.2 赋值运算 32
    2.6.3 关系运算 32
    2.6.4 逻辑运算 33
    2.6.5 位运算 33
    2.6.6 条件运算 35
    2.6.7 其他运算符 36
    2.6.8 运算符的优先级别 36
    2.7 指针类型 37
    2.7.1 指针的定义与声明 37
    2.7.2 指针的内容 37
    2.7.3 指针的运算 38
    2.7.4 指针的使用 40
    2.8 习题练习 41

    第3章 数据类型转换 43
    3.1 装箱和拆箱 43
    3.1.1 装箱(Boxing) 43
    3.1.2 拆箱(Unboxing) 44
    3.2 隐式数据类型转换 45
    3.2.1 隐式数值类型转换 45
    3.2.2 隐式枚举类型转换 46
    3.2.3 隐式引用类型转换 47
    3.3 显式数据类型转换 48
    3.3.1 显式数值类型转换 48
    3.3.2 显式枚举类型转换 50
    3.3.3 显式引用类型转换 50
    3.4 习题练习 51

    第4章 计算控制——结构化程序设计 53
    4.1 如果——条件语句 53
    4.1.1 如果,那么——if 53
    4.1.2 如果,那么;否则——if,else 55
    4.1.3 如果中的如果——嵌套if,else 56
    4.1.4 如果,那么;否则的另一种表达方式——?: 57
    4.1.5 多条件选择——switch 58
    4.2 会转圈的语句——循环语句 60
    4.2.1 for循环 60
    4.2.2 while循环 63
    4.2.3 do/while循环 65
    4.2.4 foreach循环 66
    4.3 跳出循环——跳转语句 67
    4.3.1 使用break和continue语句的区别 67
    4.3.2 饱受争议的goto语句 68
    4.3.3 return语句的使用 70
    4.4 C#预处理器指令 70
    4.4.1 使用预处理指令——#define和#undef 70
    4.4.2 条件编译——#if、#elif、#else和#endif 71
    4.4.3 警告与错误信息——#warning和# error 72
    4.4.4 可视编辑器提示——#region和#endregion 72
    4.4.5 指定行号——#line 72
    4.4.6 关闭警告消息——#pragma 72
    4.5 程序员加油站——递归法 73
    4.5.1 递归法概述 73
    4.5.2 递归的精髓——求解汉诺塔问题 73
    4.6 习题练习 75

    第5章 字符串、数组与集合 77
    5.1 理解字符串 77
    5.1.1 字符串类型定义 77
    5.1.2 字符串类型应用实例 79
    5.1.3 string与String的区别 82
    5.2 存储盒子的“仓库”——数组 82
    5.2.1 数组的定义 82
    5.2.2 二维数组 85
    5.2.3 多维数组和交错数组 87
    5.3 程序员加油站——数组的应用 88
    5.3.1 把数组作为参数传递给方法 88
    5.3.2 使用数组模拟栈操作 89
    5.3.3 数据的排序与冒泡排序算法 91
    5.4 一个与数组相似的新类型——集合 92
    5.4.1 集合的概述 93
    5.4.2 集合类的使用实例 93
    5.4.3 集合与数组的区别 97
    5.5 习题练习 97

    第6章 C#程序员UML建模基础 100
    6.1 为什么要建模 100
    6.2 UML概述 101
    6.3 用例建模 101
    6.3.1 用例图 101
    6.3.2 用例描述 102
    6.3.3 用例建模实例 102
    6.4 类图 103
    6.4.1 绘制类图 104
    6.4.2 类图中的各种关系 105
    6.5 活动图 107
    6.6 状态图 107
    6.7 序列图 108
    6.8 习题练习 109

    第2部分 C#与面向对象程序设计

    第7章 初识面向对象程序设计 113
    7.1 万物皆为对象 113
    7.2 初识封装 114
    7.3 类和对象 114
    7.3.1 类的声明 114
    7.3.2 类的成员 115
    7.3.3 类的成员的可见性 116
    7.3.4 对象的创建与使用 117
    7.3.5 静态成员与非静态成员 118
    7.3.6 this关键字 118
    7.4 对象的创建与销毁 119
    7.4.1 构造函数 120
    7.4.2 静态构造函数 122
    7.4.3 析构函数 124
    7.5 类的执行工具——方法 124
    7.5.1 方法的声明 125
    7.5.2 方法的返回值 125
    7.5.3 方法的参数 126
    7.5.4 方法的重载 127
    7.6 域、属性和索引指示器 128
    7.6.1 域 128
    7.6.2 属性 131
    7.6.3 索引指示器 133
    7.7 再论封装 134
    7.7.1 用传统的读、写方法封装 134
    7.7.2 用属性来实现封装 135
    7.8 命名空间 135
    7.8.1 命名空间的声明 136
    7.8.2 成员与类型声明 137
    7.8.3 使用指示符 137
    7.9 习题练习 140
    第8章 复用现有的代码——继承与多重继承 142
    8.1 继承的意义 142
    8.1.1 继承的引入 142
    8.1.2 为何要使用继承 143
    8.2 用UML图描述继承 144
    8.3 父与子——类的继承 145
    8.3.1 基类与派生类 145
    8.3.2 继承中的构造函数 151
    8.3.3 访问和隐藏基类方法 152
    8.3.4 虚方法与重写方法 153
    8.3.5 抽象类和抽象方法 154
    8.3.6 密封类和密封方法 155
    8.4 继承与访问修饰符 156
    8.4.1 可见性访问修饰符 156
    8.4.2 其他访问修饰符 157
    8.5 双亲与子——多重继承 157
    8.5.1 水陆两用汽车的类图设计 157
    8.5.2 用接口实现多重继承 158
    8.5.3 用扩展方法实现多重继承 160
    8.6 C#的继承规则 161
    8.7 再论继承与封装的关系 161
    8.8 程序员加油站——又论冒泡排序算法 162
    8.9 习题练习 166
    第9章 改写对象的行为——多态 169
    9.1 笔与其派生类的写方法 169
    9.2 多态的类型 170
    9.2.1 编译时的多态性 170
    9.2.2 运行时的多态性 170
    9.3 多态的实现 172
    9.3.1 通过接口实现的多态性 172
    9.3.2 通过继承实现的多态性 174
    9.3.3 通过抽象类实现的多态性 174
    9.4 程序员加油站——经典的图形游戏 176
    9.4.1 类图分析 176
    9.4.2 代码实现与分析 177
    9.4.3 游戏的客户端 181
    9.5 习题练习 183
    第10章 多功能的运算符——运算符重载 184
    10.1 引入运算符重载 184
    10.2 运算符重载的规则 185
    10.3 一元运算符的重载 186
    10.4 二元运算符的重载 188
    10.5 比较运算符的重载 190
    10.6 习题练习 191
    第11章 软件模块之间的协定——接口 192
    11.1 打印机程序的困惑 192
    11.2 接口的意义 193
    11.2.1 软件的多层设计思考 193
    11.2.2 组件与接口 193
    11.2.3 组件化程序设计思考 194
    11.3 接口的定义 195
    11.4 接口的成员 195
    11.5 在UML中对接口的描述 197
    11.6 接口的继承与多重继承 198
    11.7 接口成员访问 199
    11.8 接口的实现 200
    11.8.1 在类中实现接口 201
    11.8.2 显式实现接口成员 203
    11.8.3 显式与隐式实现接口成员的区别 205
    11.8.4 接口映射 205
    11.8.5 接口的重实现 209
    11.9 抽象类与接口 210
    11.9.1 在抽象类中实现接口 210
    11.9.2 抽象与接口的区别 210
    11.9.3 抽象与接口的使用 211
    11.10 接口作为返回值与参数 211
    11.11 程序员加油站——打印机程序的设计 214
    11.12 习题练习 216
    第12章 面向对象设计原则与UML描述 218
    12.1 腐化的软件设计 218
    12.1.1 设计的臭味 218
    12.1.2 软件为何会腐化 220
    12.2 简单就是美——单一职责原则(SRP) 220
    12.2.1 从Communication类的设计来看待单一职责原则 221
    12.2.2 分离耦合的职责 222
    12.3 修改封闭扩展开放——开放—封闭原则(OCP) 222
    12.3.1 开封—封闭原则概述 222
    12.3.2 银行储蓄业务的分析与设计 223
    12.4 子类型替换基类型——Liskov替换原则(LSP) 226
    12.4.1 Liskov替换原则概述 226
    12.4.2 违反Liskov替换原则的场景 226
    12.4.3 用提取公共部分的方法来代替继承 228
    12.5 依赖于抽象——依赖倒置原则(DIP) 229
    12.5.1 依赖倒置原则概述 229
    12.5.2 再论银行储蓄业务的设计 230
    12.6 分离接口——接口隔离原则(ISP) 232
    12.6.1 接口污染 232
    12.6.2 分离客户就是分离接口 234
    12.6.3 使用委托分离接口 235
    12.6.4 使用多重继承分离接口 235
    12.7 习题练习 236
    第3部分 C#语言高级特性
    第13章 程序的体检医生——异常处理 239
    13.1 异常处理概述 239
    13.2 C#异常处理类 240
    13.3 try、catch和finally 241
    13.3.1 try和catch的用法 241
    13.3.2 finally的用法 244
    13.4 把异常传给调用者 245
    13.4.1 调用者处理 245
    13.4.2 抛出异常 245
    13.4.3 重发异常 246
    13.4.4 添加异常信息 247
    13.5 用户自定义异常 248
    13.5.1 定义自己的异常类 248
    13.5.2 从自己的代码中抛出异常 248
    13.6 细说异常使用 249
    13.6.1 何时考虑抛出异常 249
    13.6.2 在异常处理程序中做什么 249
    13.6.3 在何处放置异常处理程序 250
    13.6.4 异常与返回错误代码的对比 250
    13.6.5 永远不要预测bug造成的后果能够被异常处理程序所捕获 250
    13.7 习题练习 250
    第14章 房屋中介与租房——委托与事件 252
    14.1 从房屋中介与租房看待委托与事件 252
    14.2 又论“Hello,World” 253
    14.3 委托的概述 254
    14.3.1 委托的声明 254
    14.3.2 将方法绑定到委托 256
    14.4 事件 257
    14.4.1 引入事件 258
    14.4.2 声明事件 260
    14.4.3 使用事件 260
    14.4.4 访问器形式的事件 261
    14.4.5 在接口中声明事件 263
    14.5 多播委托 264
    14.6 委托中的协变和逆变 266
    14.7 匿名方法 268
    14.7.1 什么是匿名方法 268
    14.7.2 匿名方法的参数与返回值 268
    14.7.3 匿名方法块规则 269
    14.7.4 匿名方法的外部变量 269
    14.8 习题练习 272
    第15章 程序集与反射 274
    15.1 再论“Hello, World” 274
    15.1.1 创建“Hello, World”的业务逻辑类库 274
    15.1.2 详解C#程序集版本控制文件 275
    15.1.3 创建“Hello, World”应用层 277
    15.2 反射的概述 278
    15.2.1 什么是反射 278
    15.2.2 反射的作用 279
    15.3 反射的实际使用 280
    15.3.1 反射AppDomain的程序集 280
    15.3.2 利用反射获取类型信息 281
    15.3.3 通过反射创建类型的实例 282
    15.3.4 利用反射动态调用类成员 284
    15.4 反射的性能 286
    15.5 习题练习 286
    第16章 序列化与反序列化 287
    16.1 序列化的概述 287
    16.1.1 从权限系统来看待序列化和反序列化 287
    16.1.2 序列化的作用 288
    16.1.3 为序列化配置对象 289
    16.2 序列化和反序列化方式 290
    16.3 使用BinaryFormatter进行序列化 291
    16.4 使用SoapFormatter进行序列化 293
    16.5 使用XmlSerializer进行序列化 295
    16.6 自定义序列化 297
    16.6.1 使用ISerializable自定义序列化 298
    16.6.2 使用特性自定义序列化 301
    16.7 序列化过程中的步骤 302
    16.8 序列化准则 303
    16.9 习题练习 303
    第17章 项目小组和程序员——进程和线程 304
    17.1 进程与线程概述 304
    17.1.1 从打印工资报表看待进程与线程 304
    17.1.2 进程与线程的关系 306
    17.2 .NET平台下与进程进行交互 306
    17.2.1 Process类简介 306
    17.2.2 简单的进程操作实例 307
    17.3 初识多线程操作 310
    17.3.1 System.Threading概述 310
    17.3.2 一个简单的线程例子 312
    17.3.3 ThreadStart的使用 313
    17.3.4 线程的并行操作 314
    17.3.5 终止线程 316
    17.3.6 前台线程与后台线程 318
    17.3.7 线程的优先级 319
    17.4 线程中存在的问题 321
    17.4.1 竞争条件 321
    17.4.2 锁定 323
    17.5 线程同步 325
    17.5.1 没有同步的情况 325
    17.5.2 lock语句 326
    17.5.3 Monitor类 328
    17.5.4 使用lock与Monitor来解决生产者与消费者的问题 330
    17.5.5 Events类 333
    17.5.6 互斥对象 336
    17.6 多线程的自动管理 336
    17.6.1 线程池 337
    17.6.2 定时器 340
    17.7 习题练习 343
    第18章 万能模板——泛型 345
    18.1 泛型的引入 345
    18.1.1 为什么要使用泛型 345
    18.1.2 创建和使用泛型 347
    18.1.3 命名规则 348
    18.2 泛型类 348
    18.2.1 声明泛型类 348
    18.2.2 类型参数 349
    18.2.3 泛型类的继承 350
    18.2.4 泛型类的成员 350
    18.2.5 泛型类中的静态变量 351
    18.2.6 泛型类中的静态构造函数 351
    18.2.7 访问受保护的成员 352
    18.2.8 泛型类中的方法重载 352
    18.2.9 创建泛型类的注意事项 353
    18.3 泛型接口 353
    18.3.1 实现接口的惟一性 353
    18.3.2 显式接口成员实现 354
    18.4 泛型委托 355
    18.5 泛型方法 355
    18.5.1 创建和使用泛型方法 355
    18.5.2 abstract、virtual和override泛型方法 356
    18.5.3 泛型静态方法 357
    18.5.4 类型实参推断 358
    18.6 参数约束 358
    18.7 习题练习 360
    第19章 C# 3.0语言新特性 364
    19.1 隐式类型 364
    19.1.1 隐式类型局部变量的声明与使用 364
    19.1.2 隐式类型数组 365
    19.1.3 隐式类型局部变量的使用限制 366
    19.1.4 隐式类型局部变量的使用注意事项 366
    19.2 匿名类型 367
    19.2.1 引入匿名类型 367
    19.2.2 创建和使用匿名类型 368
    19.2.3 匿名类型与隐式类型变量的区别 369
    19.3 扩展方法 369
    19.3.1 定义扩展方法 369
    19.3.2 导入扩展方法 370
    19.3.3 调用扩展方法 370
    19.3.4 扩展方法使用注意事项 372
    19.4 对象和集合初始化器 372
    19.4.1 引入对象初始化器 372
    19.4.2 在初始化语法中调用自定义构造函数 374
    19.4.3 初始化内部类型 375
    19.4.4 集合初始化器 376
    19.5 Lambda表达式 377
    19.5.1 创建Lambda表达式 377
    19.5.2 Lambda表达式转换 378
    19.5.3 类型推断 379
    19.5.4 重载抉择 381
    19.5.5 表达式树 381
    19.6 习题练习 382
    第4部分 基于UML的面向对象分析与设计过程
    第20章 基于UML的面向对象分析与设计过程 384
    20.1 细说需求分析 384
    20.1.1 需求分析流程 385
    20.1.2 基于Web通用框架的需求描述 387
    20.2 构造业务用例图 387
    20.2.1 确定系统的参与者 387
    20.2.2 确定系统的业务用例 388
    20.2.3 绘制业务用例图 389
    20.3 使用活动图来描述业务用例 389
    20.3.1 绘制操作子系统插件菜单的活动图 389
    20.3.2 绘制管理用户权限的活动图 390
    20.4 构造系统用例图 390
    20.5 用例规约 391
    20.5.1 基本流 392
    20.5.2 备选流 393
    20.5.3 特殊需求 393
    20.5.4 前置条件与后置条件 393
    20.5.5 描述用例规约实例 393
    20.6 绘制业务领域类图 396
    20.7 系统架构设计 397
    20.8 数据库设计 398
    20.8.1 数据库表设计 398
    20.8.2 表关系设计 399
    20.9 总体类图设计 400
    20.10 模块详细设计与编码 401
    20.10.1 数据库通用操作组件:IBHDataAccess 401
    20.10.2 用户权限管理接口:IBHPowerMangageInterface 402
    20.10.3 用户权限管理业务逻辑操作层:IBHPowerManageClass 404
    20.10.4 用户权限管理页面表示层:IBHPowerManage 405
    20.10.5 Web通用框架:IBHWebFramework 406
    20.11 Web通用框架的部署与测试 408
    20.12 习题练习 410
  • 相关阅读:
    css报模块没找到 分析思路 从后往前找,先定位最后blue.less 解决:iview升级4.0 css没改导致编译不过去
    将config从内部移动到外部 3部曲
    iviewadmin url 加入 Router base #viewDesignAdmin
    phpStudy
    rimraf node_modules 突然不能用了 怀疑是yarn的问题,从环境变量将yarn删掉,能用了
    this.current = params.page || 1 (前提是params对象一定要存在)
    onOK Modal.warning iview 要写一个函数 套上,不然会得不到异步调用,直接弹出的时候就执行了
    ant-design-pro 如何打包成 本地html,双击即可查看
    iview mock main.js
    svelte & Polymer Project
  • 原文地址:https://www.cnblogs.com/madengwei/p/1582869.html
Copyright © 2020-2023  润新知