4.3.2 应该在什么时候使用goto?

GreyZeng 2021-08-07 15:23:11

原文地址
教材4.3.2中写到

函数最好有单一的出口,为了达到这一目的,可以使用goto。只要有助于程序逻辑的清晰体现,什么方法都可以使用,包括goto。

作者认为只要有助于逻辑清晰表达,使可以使用goto的。犹记得大一时接触c语言时,老师特地说过不要使用goto,goto虽然好用,但会使程序结构混乱。

于是抱着疑惑查阅了相关资料,发现主要有两种观点。一种就是不提倡使用goto,因为容易把逻辑弄乱且难以理解;另一种提倡使用goto,因为在跳出多层循环和异常处理时比较方便且效率高,很多大型项目、开源项目,包括linux都会巨量的出现goto来处理错误。所以比较好的标准就是在错误处理的时候使用goto,其他地方都禁止使用goto吗?

...全文
587 6 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
GreyZeng 2022-03-14
  • 打赏
  • 举报
回复

经过了一个大三下学期,我的代码总行数增长了近9000行,其中包括在软件工程课程中使用的Javascript,WXSS,WXML,C++以及其他课程使用的Python,Matlab。在这些代码中,跳转语句非常多,其中有的地方需要连接到一个语句块之外,但是所连接到的地方又无需使用多次,这个时候,如果用到goto语句,就可以极大的减少代码行数,并且使函数简单化。

​ 而且我发现,《构建之法》这本书中提到的“函数最好有单一出口,为了达到这一目的,可以使用goto。只要有助于程序逻辑的清晰体现,什么方法都可以使用,包括goto”,这一观点非常正确,一个函数最好只有一个出口,这样在逻辑上会非常清晰,并且,在Debug的时候,如果只有一个出口的话,单步调试中进出函数的过程都会非常明晰,编写程序的时候也不会错在某个出口的返回值出了问题。因此我认为,只要是符合代码规范,并且有助于代码的清晰展示,任何语句都可以使用,良好的goto语句比臃肿的if判断反而更利于阅读。

原文地址

GreyZeng 2022-03-14
  • 打赏
  • 举报
回复

目前我认为软件开发的过程中只要能够使代码实现清晰简洁,像goto这样的方法也可以考虑使用。但一般而言goto只适用于某些特殊的场景,例如所有代码分支都有统一出口或多重循环的情况。无论如何,写出让他人可以看懂的代码是最重要的。
原文地址

GreyZeng 2021-08-07
  • 打赏
  • 举报
回复

这里我仍然坚持学期初的观点,即:

  • 只有在需要错误处理而语言本身没有提供错误处理功能的情况下使用goto语句
    同时多加入两点前提:

  • 优先考虑更换开发语言

  • 同时应当在项目的README,相关函数的开头加以说明,且确保成员们受到过相关的培训

团队的一切规范都是服务于开发效率的,但是规范对于开发效率和可维护性确实有很大影响,一种不常见的规范本来就是对开发人员的一种心智负担,因此如果没有特殊需要,不要使用这样的构造。

关于开发语言,相信不少人会对此抱有疑问,但是语言本身确实有其专长,如果进行Web开发,那么去使用没有错误处理的C显然是不明智的。事实上,语言本身是根据需要构建的,如果你发现一门语言没有你需要的功能以至于你需要绕很多弯去实现,很可能你的使用方式是错误的,或者这门语言不适合解决你现在遇到的问题。不得不提一提我们项目的React(x

原文地址

GreyZeng 2021-08-07
  • 打赏
  • 举报
回复

对于这个问题,我也询问了周围同学的看法,大家的观点大都也与我在提出疑问时的观点一致,goto语句可类比于汇编程序中的跳转指令,它容易造成包含分支和循环结构的程序逻辑混乱,往往会给阅读程序代码的工作人员带来更为复杂的任务难度,因而往往不建议在程序中使用goto语句。
原文地址

GreyZeng 2021-08-07
  • 打赏
  • 举报
回复

在本学期的软工课程中并没有使用到goto,不过经过团队项目的实践,还是很认同助教的观点“在团队项目中尽量约束”。对于大佬而言,goto可以简化逻辑,但在团队合作中,如果需要阅读含有goto的代码,那会变得非常头痛。
原文地址

本书是讲述Visual Basic编程标准的一本专著。全书分5个部分,共14章。分别讲述使用Visual Basic编程时总体设计、代码结构设计、用户界面设计和小组软件开发应遵循的标准。全书配有大量应用实例,便于读者学以致用。本书适用于Visual Basic 编程人员,对于使用其他语言的编程人员,也有很高的参考价值。 目 录 译者序 前言 第一部分 设 计 第1章 创建对象和工程模板 1 1.1 使用对象模板 1 1.2 使用项目模板 2 1.2.1 Visual Basic项目模板概述 2 1.2.2 创建自定义项目模板 4 1.3 自定义模板的行为特性 4 1.3.1 激活模板和取消模板的激活状态 4 1.3.2 设置模板文件夹 5 1.4 编程原则 5 1.4.1 不要将对象模板中的特定应用程序 的值或特定组件的值进行硬编码 5 1.4.2 在对象模板中提供内容广泛的注 释,尤其是在需要进行修改的地方 要加上注释 7 第2章 设计模块和过程 9 2.1 创建具有很强内聚力的模块 9 2.2 创建松散连接和高度专用的过程 10 2.2.1 使所有过程都执行专门的任务 10 2.2.2 尽量使过程成为自成一体的独立 过程 11 2.2.3 尽量减少扇入和扇出 12 2.2.4 设法按字母顺序对模块中的过程 进行排序 12 2.3 编程原则 13 2.3.1 为过程和模块赋予表义性强的名字 13 2.3.2 为每个过程赋予单个退出点 15 2.3.3 为每个过程赋予明确定义的作用域 18 2.3.4 用参数在过程之间传递数据 18 2.3.5 使用统一和直观明了的方式来调 用过程 21 第二部分 编程中使用的约定 第3章 命名约定 23 3.1 数据类型后缀 23 3.2 匈牙利标记法 23 3.2.1 表示变量数据类型的前缀 24 3.2.2 表示变量的作用域的前缀 25 3.2.3 其他前缀 26 第4章 使用常量和枚举值 28 4.1 使用常量 28 4.1.1 幻数很容易在数据输入时出错 28 4.1.2 幻数很难更新 28 4.1.3 常量使代码更容易阅读 29 4.2 使用枚举值 29 4.2.1 创建自定义的枚举值 30 4.2.2 使用自定义枚举值 30 4.3 编程原则 31 4.3.1 给所有常量加上前缀c_和作用域 指示符 31 4.3.2 无论什么作用域,均用常量取代 幻数 33 4.3.3 只要可能,均应使用枚举 33 4.3.4 引用控件数组的元素时请使用常 量 34 4.3.5 将应用程序前缀或公司特定的前 缀用于枚举成员 35 4.3.6 当枚举值不能使用时,使用常量 36 4.3.7 当参数接受有限数量的值时,请 使用枚举 38 4.3.8 验证作为枚举类型传递的值 38 第5章 变量 41 5.1 编程原则 41 5.1.1 定义有焦点的变量 41 5.1.2 为变量赋予表义性强的名字 43 5.1.3 在变量名中混合使用大小写字母 46 5.1.4 只对常用变量名和长变量名进行 缩写 46 5.1.5 使用统一的量词 47 5.1.6 使用肯定形式的布尔变量 47 5.1.7 显式说明变量 49 5.1.8 用精心选择的数据类型说明变量 51 5.1.9 只有在绝对必要时才使用Variant 数据类型 54 5.1.10 尽量缩小变量的作用域 56 5.1.11 使用“和”字符对字符串进行 并置操作 58 第6章 对错误的处理 60 6.1 Visual Basic的编译选项 60 6.2 Err对象 61 6.3 错误处理程序的类型 62 6.3.1 使用On Resume Next以忽略错误 62 6.3.2 使用On Error GoTo转移执行的代 码流 64 6.3.3 错误处理程序与调用栈 68 6.3.4 使用On Error GoTo 0,在运行时 取消错误处理程序的激活状态 69 6.3.5 用调试方式激活错误处理程序和 取消其激活状态 70 6.4 中央错误处理程序 71 6.5 编程原则 76 6.5.1 使用On Error GoTo语句捕获意 料之外的错误 76 6.5.2 使用On Error Resume Next语句 捕获预料之中的错误 77 6.5.3 创建统一的错误处理程序块 79 第三部分 代码结构 第7章 代码的格式化 83 7.1 编程原则 86 7.1.1 不要将多个语句放在同一行上 86 7.1.2 使用行接续符 87 7.1.3 缩进后续行 90 7.1.4 运用语句缩进来显示代码的组织 结构 92 7.1.5 对模块的Declarations部分中的代 码进行缩进,显示其从属关系 98 7.1.6 使用白空间将相关语句组合在一 起 99 第8章 代码的注释 106 8.1 编程原则 106 8.1.1 用文字说明代码的作用 106 8.1.2 如果你想违背好的编程原则,请 说明为什么 107 8.1.3 用注释来说明何时可能出错和为 什么出错 108 8.1.4 在编写代码前进行注释 109 8.1.5 纯色字符注释行只用于主要注释 110 8.1.6 避免形成注释框 112 8.1.7 使用撇号来指明注释 112 8.1.8 增强注释的可读性 114 8.1.9 对注释进行缩进,使之与后随的 语句对齐 115 8.1.10 为每个过程赋予一个注释标头 115 8.1.11 使用内部注释来说明代码进程 118 8.1.12 用行尾注释来说明变量 122 第9章 循环结构 123 9.1 编码指导原则 123 9.1.1 使用For...Next,使代码循环运行 规定的次数 123 9.1.2 使用Do...loop,使循环按照未定 次数来运行 130 9.1.3 用Do...Loop取代While...Wend 135 9.1.4 使用For Each...Next,循环运行 一个集合的所有成员 135 第10章 控制代码流 140 10.1 编程原则 140 10.1.1 当根据一个条件是True还是False 来作出判断时,使用If...Then...Else 140 10.1.2 对非布尔表达式与各种可能的 值进行比较时,使用Select Case 语句 143 10.1.3 用行尾注释使嵌套式判断结构 更加清楚 147 10.1.4 对表达式进行格式化,以便进行 准确的计算和代码的理解 148 10.1.5 尽可能不要使用GoSub 149 10.1.6 只有当没有其他替代方法或者 当转移到一个错误处理程序或单 个退出点时,才使用GoTo语句 150 第四部分 用户界面的操作 第11章 用户界面的设计 153 11.1 界面设计必须保持一致 153 11.2 编程原则 154 11.2.1 为窗体赋予统一的外观和行为 特性 154 11.2.2 使控件具备标准外观 162 11.2.3 在规定情况下使用最佳界面组 件 167 11.2.4 提供便于理解和使用的菜单 171 11.2.5 尽可能使用系统颜色 177 第12章 用户的输入和通知消息 179 12.1 用户的输入 179 12.2 通知消息 180 12.3 编程原则 180 12.3.1 确保完善的键盘导航和交互操 作特性 180 12.3.2 提供统一和直观的鼠标交互操 作特性 185 12.3.3 创建有创意和功能良好的消息框 193 第五部分 小组操作的项目 第13章 版本控制 199 13.1 编程原则 199 13.1.1 每次对程序编译后应将版本号 递增1 199 13.1.2 在About对话框中显示程序的版 本号 200 13.1.3 保持ActiveX组件中的向后兼容 性 201 13.1.4 在Readme文件中记下所做的修 改 205 13.1.5 对文件做好备份 206 13.1.6 使用Microsoft Visual SourceSafe 来维护源代码的版本 206 第14章 源代码控制 207 14.1 小组软件开发必须解决的问题 207 14.2 了解Visual SourceSafe 208 14.3 安装Visual SourceSafe 208 14.3.1 创建Visual SourceSafe数据库 209 14.3.2 打开Visual SourceSafe数据库 210 14.3.3 将用户添加给Visual SourceSafe 数据库 211 14.3.4 将Visual Basic工程置于Source- Safe控件下 211 14.4 Visual Basic项目与Visual SourceSafe 213 14.4.1 指定工作文件夹 214 14.4.2 创建项目的工作拷贝 215 14.4.3 使用Visual SourceSafe Explorer 借出文件 216 14.4.4 通过Visual Basic IDE借出和归 还文件 218 14.4.5 将新文件添加给源代码控制下 的项目 219 14.4.6 获取文件的最新版本 219 14.4.7 对不同版本进行比较 221.
第1篇 Linux下C语言基础 第1章 Linux简介 1.1 GNU简介 1.2 Linux简介 1.2.1 Linux发展史 1.2.2 Linux发行版 1.2.3 Linux内核版本 1.2.4 Linux与UNIX的关系 1.2.5 Linux在服务器方面的发展 1.2.6 Linux在嵌入式系统方面的发展 1.2.7 Linux在桌面系统方面的发展 1.3 Linux环境下的其他编程语言 1.3.1 C++ 1.3.2 Java 1.3.3 Perl 1.3.4 Python 1.3.5 Ruby 1.3.6 PHP 第2章 控制结构 2.1 goto语句 2.1.1 C语言中的无条件跳转 2.1.2 使用goto语句进行出错处理 2.1.3 出错处理的一般模型 2.2 C语言中的分支结构 2.2.1 分支结构的翻译 2.2.2 使用goto语句实现分支结构 2.3 短路计算 2.3.1 短路计算 2.3.2 &&运算的短路计算 2.3.3 ||运算的短路计算 2.4 C语言中的循环结构 2.4.1 while循环 2.4.2 do…while循环 2.4.3 for循环 2.5 switch语句 2.5.1 switch语句的应用 2.5.2 使用goto语句实现switch语句 2.6 优化控制结构 2.6.1 表达式优化——使用替换程序中的乘除法 2.6.2  表达式优化——常量折叠 2.6.3 表达式优化——使用数学公式 2.6.4 表达式优化——存储问题 2.6.5 分支优化——改变判断顺序 2.6.6 分支优化——使用switch语句 2.6.7 循环优化——一次性计算 第3章 C语言中的函数 3.1 函数的本质 3.2 变量的作用域和生命期 3.2.1 全局变量 3.2.2 局部变量 3.3 变量的初始值 3.3.1 全局变量的初始值 3.3.2 局部变量的初始值 3.4 与函数有关的优化 3.4.1 函数调用与程序优化 3.4.2 变量存储优化 3.5 编写多文件程序——变量的存储类别 3.5.1 存储类别 3.5.2 static变量的作用——改变变量的生命期 3.5.3 static变量的作用——实现封装和模块化设计 3.6 编写多文件的程序——链接的作用 3.6.1 链接多个文件 3.6.2 链接时符号解析规则 3.6.3 链接规则的应用 3.7 可变参数 3.7.1 可变参数的概念 3.7.2 实现一个简单的可变参数的函数 3.7.3 可变参数实例 3.7.4 关于printf函数的疑问——缺少整型参数 3.7.5 关于printf函数的疑问——缺少字符串地址参数 第4章 C语言中的指针与字符串 4.1 sizeof运算符 4.1.1 sizeof运算符的应用——得到内置类型的大小 4.1.2 sizeof运算符的应用——得到复合类型的大小 4.2 指针的应用 4.2.1 指针与别名陷阱 4.2.2 数组的指针 4.2.3 指针的指针 4.2.4 指针与参数传递 4.2.5 指针类型的意义 4.2.6 void*型指针 4.3 函数的指针 4.3.1 C语言中的函数指针 4.3.2 函数指针的应用——回调函数 4.3.3 函数指针数组 4.4 字符串 4.4.1 字符串与字符数组 4.4.2 字符串与指针 4.4.3 限定修饰符const 4.4.4 const关键字修饰指针——在指针定义之前 4.4.5 const关键字修饰指针——在指针定义之中 4.4.6 const关键字修饰指针——在指针定义之前和定义之中 4.4.7 使用const关键字的意义 第5章 C语言的高级技术 第2篇 C语言开发环境 第6章 vi与vim编辑器 第7章 gcc编译器 第8章 makefile 第9章 gdb 第3篇 Linux进程操作 第10章 进程环境 第11章 进程控制 第12章 时间和日历历程 第13章 信号及信号处理 第14章 进程间通信 第15章 线程 第4篇 Linux文件操作 第17章 文件I/O 第18章 文件管理 第19章 目录操作 第20章 特殊文件 第21章 基于流的I/O 第5篇 Linux网络编程 第22章 TCP和UDP协议 第23章 网络编程基础 第24章 网络编程进阶 第25章 网络编程实例——实现文件传输程序 第26章 网络编程实例——简单的Web服务器 第6篇 shell脚本知识 第27章 shell脚本基础 第28章 shell脚本中的控制结构 844
详细解释了uboot的start.s中的每行代码; 添加了相关知识点的详细解释,包括: 4.1. 如何查看C或汇编的源代码所对应的真正的汇编代码 67 4.2. uboot初始化中,为何要设置CPU为SVC模式而不是设置为其他模式 69 4.3. 什么是watchdog + 为何在要系统初始化的时候关闭watchdog 70 4.3.1. 什么是watchdog 71 4.3.2. 为何在要系统初始化的时候关闭watchdog 71 4.4. 为何ARM7中PC=PC+8 71 4.4.1. 为何ARM9和ARM7一样,也是PC=PC+8 73 4.5. AMR寄存器的别名 + APCS 79 4.5.1. ARM中的寄存器的别名 79 4.5.2. 什么是APCS 81 4.6. 为何C语言(的函数调用)需要堆栈,而汇编语言却不需要堆栈 81 4.6.1. 保存现场/上下文 82 4.6.1.1. 什么叫做上下文context 82 4.6.2. 传递参数 82 4.6.3. 举例分析C语言函数调用是如何使用堆栈的 83 4.7. 关于为何不直接用mov指令,而非要用adr伪指令 84 4.8. mov指令的操作数的取值范围到底是多少 85 4.9. 汇编学习总结记录 89 4.9.1. 汇编中的标号=C中的标号 89 4.9.2. 汇编中的跳转指令=C中的goto 89 4.9.3. 汇编中的.globl=C语言中的extern 90 4.9.4. 汇编中用bl指令和mov pc,lr来实现子函数调用和返回 90 4.9.5. 汇编中的对应位置有存储值的标号 = C语言中的指针变量 91 4.9.6. 汇编中的ldr+标号,来实现C中的函数调用 93 4.9.7. 汇编中设置某个寄存器的值或给某个地址赋值 94
Visual C# 2005 程序设计自学手册 *****是随书源码光盘***** *****人民邮电出版社***** **长春明日科技组织编写** 本书从初学者角度出发,通过通俗易懂的语言和大量生动典型的实例,由浅入深、循序渐进地介绍使用C#进行WinForms程序开发的常用技术和方法。全书分起步篇、提高篇和实例篇三篇,共21章。起步篇为第1章~第10章,主要介绍认识Visual C#,C#语言基础,C#语句控制,数组、面向对象编程,熟悉WinForms应用程序,WinForms窗体介绍,WinForms应用程序开发常用控件,菜单栏、工具栏和状态栏设计及对话框等内容;提高篇为第11章~第19章,主要介绍使用ADO.NET操作数据库、文件处理技术、HTML帮助文件的制作、GDI+技术、Windows打印控件、网络开发技术、注册表应用、程序调试及Windows应用程序打包与安装等内容;实例篇为第20章~第21章,主要结合实际开发经验介绍利用C#开发企业客户资源管理系统和房屋中介管理系统等内容。   本书附有配套光盘。光盘提供了书中所有实例的源代码,全部源代码都经过精心调试,在Windows XP/Windows 2000/Windows 2003 Server下全部通过,保证能够正常运行。   本书适用于C#初、中级用户,也可作为大、中专院校师生和培训班的教材,对于程序开发爱好者,本书也有非常好的参考价值。 第1篇 起步篇 第1章 认识Visual C# 3 1.1 Visual C# 概述 4 1.1.1 Visual C#发展历程 4 1.1.2 C#语言编程环境 4 1.2 .NET Framework 2.0简介 4 1.2.1 什么是.NET Framework 2.0 4 1.2.2 .NET Framework 2.0特性 5 1.3 安装集成开发环境Microsoft Visual Studio 2005 6 1.3.1 安装Microsoft Visual Studio 2005开发环境 6 1.3.2 安装Microsoft Visual Studio 2005 MSDN帮助 9 1.3.3 如何使用MSDN帮助 11 1.3.4 利用MSDN帮助附带的示例学习编程 12 1.4 创建第一个C# 程序 13 1.4.1 创建项目 13 1.4.2 设计界面 14 1.4.3 编写代码 15 1.4.4 调试运行 16 1.4.5 保存项目 17 1.5 本章小结 17 第2章 C#语言基础 18 2.1 C#语言简介 19 2.2 数据类型 19 2.2.1 什么是数据类型 19 2.2.2 值类型的使用 19 2.2.3 引用类型的使用 19 2.2.4 什么是装箱和拆箱 21 2.2.5 装箱和拆箱的使用 21 2.3 常量与变量 21 2.3.1 声明和使用常量 21 2.3.2 声明变量 22 2.3.3 变量的作用域 23 2.3.4 变量的赋值 23 2.4 数据类型转换 24 2.4.1 隐式类型转换 24 2.4.2 显式类型转换 24 2.5 C#中运算符的使用 25 2.5.1 算术运算符的使用 25 2.5.2 赋值运算符的使用 27 2.5.3 关系运算符的使用 29 2.5.4 逻辑运算符的使用 29 2.5.5 位运算的使用 29 2.5.6 其他特殊运算符 30 2.5.7 运算符优先级 31 2.6 字符串处理 31 2.6.1 比较字符串 32 2.6.2 定位字符及子串 33 2.6.3 格式化字符串 35 2.6.4 截取字符串 35 2.6.5 分割字符串 36 2.6.6 插入和填充字符串 37 2.6.7 删除和剪切字符串 37 2.6.8 复制字符串 39 2.6.9 替换字符串 40 2.6.10 StringBuilder的定义与使用 40 2.6.11 可变字符串类StringBuilder与String的区别 42 2.7 程序编写规范 42 2.7.1 代码书写规则 42 2.7.2 命名规范 43 2.8 注释 44 2.8.1 注释的作用 44 2.8.2 如何使用注释 45 2.9 本章小结 45 第3章 C#语句控制 46 3.1 选择语句 47 3.1.1 使用if语句实现单分支选择结构 47 3.1.2 使用if...else语句实现双分支选择结构 47 3.1.3 使用if...else if...else语句实现多分支选择结构 48 3.1.4 嵌套if语句的使用 50 3.1.5 使用Switch语句实现多分支选择 52 3.2 迭代语句 53 3.2.1 使用while循环语句控制程序 54 3.2.2 使用do while循环语句控制程序 55 3.2.3 使用for循环语句控制程序 56 3.2.4 使用foreach循环语句控制程序 57 3.3 跳转语句 58 3.3.1 使用break语句实现程序跳转 58 3.3.2 使用continue语句的实现程序跳转 60 3.3.3 使用goto语句实现程序跳转 60 3.3.4 使用return语句实现程序跳转 62 3.4 异常处理语句 63 3.4.1 throw语句 63 3.4.2 try-catch语句 64 3.4.3 try-catch-finally语句 65 3.5 本章小结 66 第4章 数组 67 4.1 数组简介 68 4.1.1 数组的概述 68 4.1.2 数组的应用 68 4.2 静态数组 69 4.2.1 一维数组的声明 69 4.2.2 一维数组元素的调用 69 4.2.3 二维数组的声明和调用 70 4.2.4 多维数组 71 4.3 动态数组 72 4.3.1 动态数组的声明 72 4.3.2 声明动态数组的注意事项 74 4.4 数组的基本操作 74 4.4.1 输入与输出数组 74 4.4.2 如何定位数组 76 4.4.3 如何遍历数组 78 4.4.4 增加删除数组元素 78 4.4.5 对数组进行排序 81 4.4.6 数组的合并与拆分 83 4.4.7 数组应用典型实例 85 4.5 本章小结 86 第5章 面向对象编程 87 5.1 面向对象编程 88 5.1.1 什么是面向对象编程 88 5.1.2 面向对象编程语言的特点 88 5.2 类 89 5.2.1 类的概念 89 5.2.2 类的声明 89 5.2.3 类成员的访问 89 5.2.4 类成员的保护 90 5.3 对象 90 5.3.1 对象的声明和实例化 90 5.3.2 类与对象的关系 91 5.4 构造函数和析构函数 91 5.4.1 构造函数的概念及使用 92 5.4.2 析构函数的概念及使用 92 5.5 枚举 93 5.5.1 什么是枚举 93 5.5.2 枚举的定义 93 5.5.3 枚举的使用 94 5.6 方法 95 5.6.1 方法的声明 95 5.6.2 方法的参数 96 5.6.3 静态和非静态方法的使用 96 5.6.4 方法的重载 98 5.7 封装、继承和多态 98 5.7.1 封装的概念及用途 98 5.7.2 封装的使用 98 5.7.3 继承的概念及用途 99 5.7.4 继承的使用 99 5.7.5 多态的概念及用途 100 5.7.6 多态的使用 100 5.8 接口 102 5.8.1 接口的概念 102 5.8.2 声明接口 102 5.8.3 接口的成员 102 5.8.4 接口的实现 103 5.8.5 抽象类与接口 104 5.9 域和属性 105 5.9.1 域的概念及用途 105 5.9.2 域的声明 105 5.9.3 属性的概念及用途 106 5.9.4 属性的声明 106 5.10 泛型 107 5.10.1 泛型概述及优点 107 5.10.2 泛型中的类型参数T 107 5.10.3 泛型的使用 108 5.11 匿名方法 111 5.11.1 什么是匿名方法 111 5.11.2 匿名方法的使用 111 5.12 迭代器 112 5.12.1 什么是迭代器 112 5.12.2 创建迭代器 113 5.12.3 迭代器的使用 113 5.13 分部类 114 5.13.1 什么是分部类 114 5.13.2 定义分部类 114 5.13.3 分部类的使用 114 5.14 事件和索引器 115 5.14.1 事件的概念及用途 115 5.14.2 事件的声明及使用 116 5.14.3 索引器的概念及用途 117 5.14.4 索引器的声明及使用 117 5.15 本章小结 118 第6章 熟悉WinForms应用程序 119 6.1 窗体设计器 120 6.1.1 创建窗体 120 6.1.2 使用窗体设计器 122 6.2 使用工具 123 6.2.1 熟悉工具箱 123 6.2.2 认识控件属性框 125 6.2.3 认识解决方案资源管理器 125 6.2.4 认识服务器资源管理器 128 6.3 本章小结 131 第7章 WinForms窗体介绍 132 7.1 Form窗体 133 7.1.1 Form窗体概述 133 7.1.2 Form窗体的使用 133 7.2 MDI窗体 134 7.2.1 MDI窗体概述 134 7.2.2 MDI窗体的使用 135 7.3 继承窗体 136 7.3.1 继承窗体概述 136 7.3.2 继承窗体的使用 137 7.4 本章小结 138 第8章 WinForms应用程序开发常用控件 139 8.1 控件概述 140 8.1.1 控件的作用 140 8.1.2 控件的属性、方法和事件 140 8.2 控件的分类 142 8.2.1 常用控件 143 8.2.2 容器控件 143 8.2.3 数据控件 143 8.2.4 打印控件 143 8.2.5 对话框控件 144 8.3 控件的相关操作 144 8.3.1 添加控件 144 8.3.2 对齐控件 144 8.3.3 调整控件的前后顺序 144 8.3.4 锁定控件 145 8.3.5 删除控件 145 8.4 文本类控件 145 8.4.1 应用Label控件 145 8.4.2 应用LinkLabel控件 148 8.4.3 应用Button控件 150 8.4.4 应用TextBox控件 153 8.4.5 应用RichTextBox控件 155 8.5 选择类控件 158 8.5.1 应用ComboBox控件 158 8.5.2 应用CheckBox控件 161 8.5.3 应用CheckedListBox控件 163 8.5.4 应用RadioButton控件 166 8.5.5 应用NumericUpDown控件 167 8.5.6 应用ListBox控件 170 8.6 容器控件 173 8.6.1 应用Panel控件 173 8.6.2 应用GroupBox控件 176 8.6.3 应用TabControl控件 177 8.7 组件 180 8.7.1 应用ErrorProvider组件 180 8.7.2 应用Timer组件 182 8.7.3 应用ImageList组件 184 8.7.4 应用FileSystemWatcher组件 186 8.7.5 应用HelpProvider组件 189 8.8 其他常用控件 191 8.8.1 应用ListView控件 191 8.8.2 应用TreeView控件 194 8.8.3 应用PictrueBox控件 197 8.8.4 应用NotifyIcon控件 200 8.8.5 应用DateTimePicker控件 202 8.8.6 应用MonthCalendar控件 204 8.8.7 应用ToolTip控件 206 8.8.8 应用ProgressBar控件 208 8.9 本章小结 211 第9章 菜单栏、工具栏和状态栏设计 212 9.1 菜单栏 213 9.1.1 菜单栏概念和用途 213 9.1.2 菜单栏设计 214 9.2 工具栏 215 9.2.1 工具栏概念和用途 215 9.2.2 工具栏设计 215 9.3 状态栏 217 9.3.1 状态栏概念和用途 217 9.3.2 状态栏设计 217 9.4 本章小结 218 第10章 对话框 219 10.1 消息对话框 220 10.1.1 什么是消息对话框 220 10.1.2 消息对话框的使用 220 10.2 “关于”对话框 228 10.2.1 什么是“关于”对话框 228 10.2.2 “关于”对话框的使用 228 10.3 公共对话框 230 10.3.1 “打开”对话框的使用 230 10.3.2 “另存为”对话框的使用 233 10.3.3 “颜色”对话框的使用 235 10.3.4 “字体”对话框的使用 238 10.3.5 “浏览文件夹”对话框的使用 240 10.4 本章小结 242 第2篇 提高篇 第11章 使用ADO.NET操作数据库 245 11.1 使用ADO.NET访问数据库 246 11.1.1 ADO.NET访问数据库的模式 246 11.1.2 数据库命名空间 247 11.2 ADO.NET对象模型 251 11.2.1 Connection对象 251 11.2.2 Command对象 253 11.2.3 DataReader对象 256 11.2.4 DataSet对象 258 11.2.5 DataAdapter对象 263 11.3 应用DataGridView控件 265 11.3.1 DataGridView控件的属性 265 11.3.2 DataGridView控件的方法 267 11.3.3 DataGridView控件的事件 269 11.3.4 DataGridView控件的使用 271 11.4 数据库开发基本操作 272 11.4.1 向数据库中添加数据 272 11.4.2 修改数据库中数据 273 11.4.3 删除数据库中数据 275 11.4.4 查询数据库中数据 276 11.5 本章小结 278 第12章 文件处理技术 279 12.1 System.IO命名空间 280 12.1.1 File类和Directory类 281 12.1.2 FileInfo类和DirectoryInfo类 283 12.1.3 FileStream类 284 12.1.4 StreamWriter类 287 12.1.5 StreamReader类 289 12.2 文件的基本操作 290 12.2.1 判断文件是否存在 291 12.2.2 创建文件 291 12.2.3 拷贝或移动文件 291 12.2.4 删除文件 291 12.2.5 获取文件基本信息 291 12.3 文件夹的基本操作 292 12.3.1 判断文件夹是否存在 292 12.3.2 创建文件夹 292 12.3.3 移动文件夹 292 12.3.4 删除文件夹 292 12.3.5 遍历文件夹中文件 292 12.4 文件写入和读取 294 12.4.1 文本文件的写入 294 12.4.2 文本文件的读取 294 12.5 解压缩文件 295 12.5.1 使用GZip解压缩文件 295 12.5.2 使用WinRAR解压缩文件 297 12.6 本章小结 299 第13章 HTML帮助文件的制作 300 13.1 HTML帮助文件概述 301 13.2 制作HTML帮助文件 301 13.2.1 安装Microsoft HTML Help Workshop 301 13.2.2 制作HTML帮助主题文件 302 13.2.3 制作HTML帮助项目文件 303 13.2.4 制作目录和目录文件 306 13.2.5 制作关键字和索引文件 309 13.2.6 制作.chm文件 313 13.3 HTML帮助文件的使用 314 13.4 本章小结 315 第14章 GDI+技术 316 14.1 GDI+概述 317 14.2 基本图形绘制 317 14.2.1 绘制直线 317 14.2.2 绘制矩形 318 14.2.3 绘制椭圆 319 14.2.4 绘制圆弧 320 14.2.5 绘制多边形 322 14.2.6 绘制基数样条 323 14.2.7 绘制贝塞尔样条 324 14.2.8 绘制图形路径 326 14.3 GDI+在实际开发中的应用 327 14.3.1 利用柱形图分析每月的商品销售情况 327 14.3.2 利用折线图分析网站访问流量 330 14.3.3 利用饼形图分析公司男女比例 333 14.4 本章小结 334 第15章 Windows打印控件 335 15.1 PrintDocument组件 336 15.1.1 PrintDocument组件的属性 336 15.1.2 PrintDocument组件的方法 337 15.1.3 PrintDocument组件的事件 337 15.1.4 PrintDocument组件的应用 338 15.2 PrintPreviewDialog组件 340 15.2.1 PrintPreviewDialog组件的属性 340 15.2.2 PrintPreviewDialog组件的方法 341 15.2.3 PrintPreviewDialog组件的应用 341 15.3 PrintPreviewControl组件 342 15.3.1 PrintPreviewControl组件的属性 342 15.3.2 PrintPreviewControl组件的方法 344 15.3.3 PrintPreviewControl组件的应用 344 15.4 PrintDialog组件 345 15.4.1 PrintDialog组件的属性 346 15.4.2 PrintDialog组件的方法 347 15.4.3 PrintDialog组件的应用 347 15.5 PageSetupDialog组件 348 15.5.1 PageSetupDialog组件的属性 349 15.5.2 PageSetupDialog组件的方法 349 15.5.3 PageSetupDialog组件的应用 350 15.6 本章小结 351 第16章 网络开发技术 352 16.1 System.Net命名空间 353 16.1.1 Dns类 353 16.1.2 DnsPermission类 355 16.1.3 WebRequest类 356 16.1.4 WebClient类 356 16.2 System.Net.Socket命名空间 356 16.2.1 什么是套接字 357 16.2.2 Socket类的属性、方法 357 16.3 开发网络应用程序 364 16.3.1 开发UDP协议聊天程序 364 16.3.2 开发TCP/IP协议聊天室 365 16.4 电子邮件的发送与接收 367 16.4.1 MailMessage类和SmtpClient类的作用 367 16.4.2 POP3类的作用 368 16.4.3 电子邮件的发送 369 16.4.4 电子邮件的接收 370 16.5 本章小结 375 第17章 注册表应用 376 17.1 注册表基础知识 377 17.1.1 注册表概述 377 17.1.2 注册表的结构 377 17.2 读写注册表 379 17.2.1 读取注册表信息 380 17.2.2 向注册表中写入信息 382 17.3 注册表应用 384 17.3.1 将软件使用次数写入注册表 384 17.3.2 通过注册表优化系统 385 17.4 本章小结 386 第18章 程序调式 388 18.1 什么是断点操作 389 18.2 如何使用开始、中断和停止执行 389 18.3 什么是单步执行 391 18.4 如何运行到指定位置 391 18.5 本章小结 391 第19章 Windows应用程序打包与安装 392 19.1 Windows Installer简介 393 19.2 Windows应用程序部署 393 19.2.1 创建部署项目 393 19.2.2 可选的部署功能 396 19.3 安装及卸载Windows程序 399 19.3.1 在本地计算机上安装 399 19.3.2 部署到其他计算机 399 19.3.3 卸载安装应用序 399 19.4 本章小结 400 第3篇 实例篇 第20章 企业客户资源管理系统 403 20.1 需求分析 404 20.2 系统设计 404 20.2.1 总体规划 404 20.2.2 系统功能结构图 405 20.2.3 开发及运行环境 405 20.3 系统命名规则 405 20.3.1 数据库命名规范 405 20.3.2 程序代码命名规范 406 20.4 数据库设计 407 20.4.1 数据表概要说明 407 20.4.2 主要数据表的结构 408 20.5 系统总体架构 409 20.5.1 文件架构 409 20.5.2 程序文件架构 410 20.6 公共类编写 411 20.6.1 BaseOperate类 411 20.6.2 OperateAndValidate类 413 20.7 系统模块设计 415 20.7.1 系统登录模块设计 415 20.7.2 主窗体模块设计 418 20.7.3 基本信息管理模块设计 420 20.7.4 客户资料管理模块设计 425 20.7.5 联系客户模块设计 431 20.7.6 客户级别分析模块分析 435 20.8 疑难问题解析 436 20.8.1 邮件的发送 436 20.8.2 水晶报表的使用 437 20.9 本章小结 438 第21章 房屋中介管理系统 439 21.1 需求分析 440 21.2 系统设计 440 21.2.1 总体规划 440 21.2.2 系统功能结构图 441 21.2.3 开发及运行环境 441 21.3 系统命名规则 442 21.4 数据库设计 442 21.4.1 数据表概要说明 442 21.4.2 主数据表的结构 442 21.4.3 创建视图 445 21.4.4 创建存储过程 446 21.4.5 创建触发器 448 21.5 系统总体架构 450 21.5.1 文件夹架构 450 21.5.2 文件架构 450 21.6 公共类编写 452 21.6.1 数据库连接类 452 21.6.2 实体类 452 21.6.3 方法类 453 21.7 系统模块设计 454 21.7.1 系统登录模块设计 454 21.7.2 用户信息管理模块设计 456 21.7.3 房源信息设置模块设计 460 21.7.4 房源信息查询模块设计 463 21.7.5 房源状态查询模块设计 467 21.8 疑难问题解析 474 21.8.1 通过触发器对视图进行添加、修改和删除操作 474 21.8.2 结束数据库连接进程完成数据库还原 474 21.9 本章小结 475 光盘源码下载地址: http://download.csdn.net/source/2891837 第一部分(1-8章) http://download.csdn.net/source/2891864 第二部分(9-15章) http://download.csdn.net/source/2891889 第三部分(16-21章) 或者搜索CSDN lawsystem上传资源。 此电子书全部下载地址: http://download.csdn.net/source/2892106 卷1 http://download.csdn.net/source/2892170 卷2 http://download.csdn.net/source/2892205 卷3

606

社区成员

发帖
与我相关
我的任务
社区描述
程序员。写过:移山之道,编程之美,构建之法,智能之门。
软件工程软件构建团队开发 企业社区 北京·朝阳区
社区管理员
  • SoftwareTeacher
  • GreyZeng
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧