分享
 
 
 

易学C#

易学C#  点此进入淘宝搜索页搜索
  特别声明:本站仅为商品信息简介,并不出售商品,您可点击文中链接进入淘宝网搜索页搜索该商品,有任何问题请与具体淘宝商家联系。
  參考價格: 点此进入淘宝搜索页搜索
  分類: 图书,计算机与互联网,程序语言与软件开发,语言与开发工具,C语言及其相关,
  品牌: 马伟

基本信息·出版社:人民邮电出版社

·页码:410 页

·出版日期:2009年10月

·ISBN:9787115211989

·条形码:9787115211989

·包装版本:第1版

·装帧:平装

·开本:16

·正文语种:中文

产品信息有问题吗?请帮我们更新产品信息。

内容简介《易学C#》正是C#与UML融合的产物,书中不仅向读者阐述了C#语言的编程基础知识与高级特性,而且还阐述了如何利用UML图形来进行面向对象的分析与设计。《易学C#》旨在帮助读者在较短的时间里对C#语言与UML得到全面深刻的理解与认识,从而使读者将C#与UML融合到一起,为读者以后的软件设计生涯打下坚实的基础。另外,《易学C#》还配备了许多经典的习题,这些习题全部是从各大软件公司的面试题中所提取的。认真地练习这些习题,能够让你在以后的职业面试中信心与成功率倍增。C#语言是微软公司近几年推出的一种新型的完全面向对象的程序设计语言,到目前为止,它已经成为了应用软件开发的主流语言,尤其是在Web开发方面更是无与伦比。UML则是面向对象软件的标准化建模语言,无论是企业信息系统、基于Web的分布式系统还是实时系统等都适合于使用UML来进行建模分析。

《易学C#》文字简洁生动,并辅之以大量的图表和代码示例,对于希望学习C#语言的学员具有自学指导的作用。《易学C#》既可作为大专、本科院校相关专业的教材,又可作为软件开发人员的技术参考手册。

作者简介马伟,微软公司最有影响力的开发者之一,软件研发工程师与系统分析师。在其以往的程序岁月中,曾经负责过远程视频监控系统、视频营销平台、企业管理应用系统、南方电网四分统计平台等项目的架构设计与开发。擅长系统分析、架构设计、数据库设计与实现、设计模式、SOA等技术,尤其对C#与UML、C++与UML的架构设计与编程有独到的见解。

编辑推荐《易学C#》:提供全书示例代码下载

每多学一点知识,就少写一行代码

《易学C#》循序渐进地向读者阐述了C#语言的编程基础知识与高级特性。以及如何利用UML图形来进行面向对象分析与设计。从而帮助读者在较短的时间内获得对C#与UML全面深刻的理解与认识,为读者以后的软件设计生涯打下坚实的基础。

目录

预备课:学习从这里开始1

1.软件=程序+文档1

2.程序起什么作用2

3.为何要面向对象2

4.什么是UML3

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,World11

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和ReadLine15

1.4.2 控制台的输出:Write和WriteLine15

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和void24

2.4.1 null24

2.4.2 void24

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 如果,那么——if53

4.1.2 如果,那么;否则——if,else55

4.1.3 如果中的如果——嵌套if,else56

4.1.4 如果,那么;否则的另一种表达方式——?:57

4.1.5 多条件选择——switch58

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和#undef70

4.4.2 条件编译——#if、#elif、#else和#endif71

4.4.3 警告与错误信息——#warning和# error72

4.4.4 可视编辑器提示——#region和#endregion72

4.4.5 指定行号——#line72

4.4.6 关闭警告消息——#pragma72

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和finally241

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 数据库通用操作组件:IBHDataAccess401

20.10.2 用户权限管理接口:IBHPowerMangageInterface402

20.10.3 用户权限管理业务逻辑操作层:IBHPowerManageClass404

20.10.4 用户权限管理页面表示层:IBHPowerManage405

20.10.5 Web通用框架:IBHWebFramework406

20.11 Web通用框架的部署与测试408

20.12 习题练习410

……[看更多目录]

序言本书的编写目的

众所周知,c#语言是微软公司在新一代开发平台.NET上推出的一种完全面向对象的新型语言。虽然只有短短几年时间的发展与推广,但c#语言凭借其自身的特性,使得它像程序设计语言中的一件艺术品一样,吸引着越来越多的开发人员转向它。

在这期间,市面上关于c#语言的辅导书非常多,使读者应接不暇、无所适从。但在仔细观察这些书后,我们不难发现普遍存在着这样一个问题:几乎市面上所有的c#书籍都向读者讲解的是纯粹的c#语言基础知识。大家知道,c#语言是一种完全面向对象的语言,在我们的日常程序设计中,只有真正地掌握好面向对象的思想才能够设计出好的面向对象程序。如果没有成熟的面向对象的思想作为指导,即便把语言学得再精通也是徒劳无功。

那么,为什么我们就不能够从一开始学习程序设计的时候就把c#语言和面向对象设计思想结合起来学习呢?为什么我们就不能够在写c#的相关书籍中融入软件工程与面向对象的思想呢?

基于上面的这些讨论和问题,使笔者产生了编写本书的源动力。可以这么说,本书不仅仅是教会读者如何使用c#语言进行程序设计,更重要的是教会读者如何用软件工程与面向对象的思想去分析设计软件以及如何使用c#语言进行面向对象程序设计,让读者从一开始学习编程就养成良好的程序设计习惯并打下坚实的基础。

文摘插图:

易学C#

其中,标签可以为任何合法的标识符,它在实际的程序代码中并不参与运算,只起到标记作用。若在程序中使用了标签语句,就可以用goto语句在一定条件下从某一处跳转到标签后的语句中。

由代码清单4—10可知,虽然我们也可以在switch语句之外使用goto语句,但它们通常会造成较差的程序结构,因此我们应该用一种更简易的结构来取代它。

4.3.3return语句的使用

ret啪语句出现在其终止执行的方法中,并将控制返回给调用方法。它还可以返回一个可选值。如果方法为void类型,则可以省略return语句。

4.4C#预处理器指令

在C#中,有许多名为“预处理器指令”的命令。这些命令不会转化为可执行代码中的命令,但会影响编译过程的各个方面。例如,使用预处理器指令可以禁止编译器编译代码的某一部分。如果计划发布两个版本的代码,即基本版本和有更多功能的企业版本,就可以使用这些预处理器指令。在编译软件的基本版本时,使用预处理器指令还可以禁止编译器编译与额外功能相关的代码。另外,在编写提供调试信息的代码时,也可以使用预处理器指令。

接下来,我们将常用的c#预处理器指令逐一讲解给读者。

4.4.1使用预处理指令——#define和#undef

预处理指令都以枵开头并位于行首(前面可以出现空格符)。在介绍条件编译之前,我们先学习两条用于定义符号和取消符号定义的预处理指令#define和#undef。

 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
>>返回首頁<<
 
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有