




已阅读5页,还剩64页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
C 高级编程 调试 应用程序开发 可以安装在客户端机器上 应用程序必须 无错误无故障可靠稳健 查找和排除错误或故障称为调试 调试的必要性 计算机化的计费系统 在事物处理过程中 系统显示错误消息 必须重新输入全部信息 在部署应用程序前必须先对其进行调试 错误类型 错误类型 语法错误 逻辑错误 运行时错误 语法错误 缺少括号等在编译时确定易于确定 错误的算法导致错误结果 公式错误等在执行过程中确定难以调试 内存泄漏 以零作除数 异常在运行时确定难以调试 调试过程 调试器 观察程序的运行时行为 跟踪变量的值 确定语义错误的位置 查看寄存器的内容 查看内存空间 调试过程 暂停 可在代码中插入 断点 以便在特定行处暂停执行该代码 调试过程 右键单击所需代码行 以设置断点 选择 插入断点 调试过程 选择 调试 继续 以便继续执行程序 调试过程 NET集成开发环境 Debug模式 Release模式 VS NET中的调试工具 局部变量 窗口 VS NET中的调试工具 监视 窗口 VS NET的调试工具 快速监视 对话框 VS NET中的调试工具 即时 窗口 VS NET中的调试工具 跨语言调试调试使用 NET框架编写的应用程序以及Win32本机应用程序加入正在运行的程序调试多个程序 VisualStudio NET调试器的功能 异常 网上银行 某学生小王转帐5000到其朋友小李的帐面上 0 4500 数据库 系统将查询发送到数据库中 tranfer money sendquery 余额 4500 5000 程序崩溃 拒绝交易 C 中的异常 C 中的异常处理 INPUTDivisorIFDivisor 0THENResult Divident Divisor 代码片段1 输入除数 结果 0 2 4 GOTOPREVIOUSLINE 触发异常处理程序 C 中的异常处理 INPUTDivisorResult Divident Divisor 代码片段1 用户自定义 错误检查机制 难以检查输入的任何 特殊字符 IFDivisor 0THENGOTOPREVIOUSLINEIFDivisor 0THENPRINT 无效输入 运行库 运行库应当提供 错误检查机制 错误与异常 错误 可预见 如信用卡号格式不对或口令不对 可由程序代码进行排除 异常 与程序无关的外部原因造成 如数据表不可用或硬件故障等 System Exception System Exception System Exception 在C 程序中 引发异常共有以下两种方式 使用显式throw语句来引发异常 在此情况下 控制权将无条件转到处理异常的部分代码使用语句或表达式在执行过程中激发了某个异常的条件 使得操作无法正常结束 从而引发异常 Try Catch Finally try和catch块 滤水器 filter water try water catch impurities Show 过滤水 杂质 程序代码 错误处理代码 try 程序代码 catch IOExceptionE 错误处理代码 try和catch块 try 程序代码 catch IOExceptionE 错误处理代码 引发I O设备异常 try和catch块 try 程序代码 catch E 错误处理代码 可处理系统中的任何一种异常 System Exception try和catch块 if grade150 thrownewInvalidNumberInput grade 不是合法的成绩 throw可用来引发自定义异常 InvalidNumberInput 使用finally try 程序代码 catch 错误处理代码 finally finally代码 无论有否异常该代码都会执行 多重catch块 try 程序代码 catch IOExceptionE 错误处理代码 catch OutOfMemoryExceptionE 错误处理代码 用于捕捉两种异常的 catch 块 usingSystem publicclassTestExcep publicstaticintCalc intj return100 j classMyApp publicstaticvoidMain TestExcepexTest newTestExcep try intdZero TestExcep Calc 0 Console WriteLine Result 0 dZero catch DivideByZeroExceptionex Console WriteLine ex Message 0 ex Message Console WriteLine ex Source 0 ex Source Console WriteLine ex TargetSite 0 ex TargetSite ToString Console WriteLine ex StackTrace 0 ex StackTrace catch Exceptionex Console WriteLine General ex Message finally Console WriteLine Cleanupoccurshere ex Message 试图除以零 ex Source 005ex TargetSite Int32Calc Int32 ex StackTrace 在TestExcep Calc Int32j 位置E 我的桌面临时文件夹 实验编程 CSharp 005 Program cs 行号96在MyApp Main 位置E 我的桌面临时文件夹 实验编程 CSharp 005 Program cs 行号107Cleanupoccurshere请按任意键继续 如何创建定制异常类 usingSystem publicclassNoDescException ApplicationException publicNoDescException publicNoDescException stringmessage base message publicNoDescException stringmessage ExceptioninnerEx base message innerEx publicinterfaceIFun1 stringShowMe publicinterfaceIFun2 stringShowMe classCircle IFun1 publicstringShowMe return Circle IFun1 publicclassObjShowMe publicstaticvoidShowMe objectobj if objisIFun1 未处理异常 当CLR找不到处理异常的catch过滤器时usingSystem classMyApp publicstaticvoidMain try intdZero 1 0 finally Console WriteLine finally 定制处理未处理异常 终止应用程序之前记录有关异常的信息 如果有足够的有关应用程序状态的信息 则可以采取其他措施 如保存程序数据以便于以后进行恢复 建议谨慎行事 因为未处理异常时可能会损坏程序数据 没有通用的方法适用于所有C 程序 Windows窗体应用 Applicatioin ThreadException newThreadExceptionEventHandler method Windows控制台应用 Thread GetDomain UnhandledException newUnhandledExceptionEventHandler method usingSystem publicclassTestExcep publicstaticintCalc intj return100 j publicclassUnForgiven publicstaticvoidMyUnhandleMethod objectsender UnhandledExceptionEventArgse ifDEBUGConsole WriteLine Debug e ToString elseConsole WriteLine Release e ToString endif classMyApp publicstaticvoidMain Thread GetDomain UnhandledException newUnhandledExceptionEventHandler UnForgiven MyUnhandleMethod try intdZero TestExcep Calc 0 finally Console WriteLine a s 定制类中实现System Object方法 ToString 默认情况下 返回类名 应覆盖此方法 显示出对象与访类其他实例不同的特有内容 Equals 定制类需定义 相等 的含义 可能两个对象有相同的字段值变相等 也可能引用了相同的内存地址才相等 定制ToString 默认返回 定制ToString方法实例 usingSystem Text usingSystem publicclassChair privatedoublemyPrice privatestringmyVendor myID publicChair doubleprice stringvendor stringsku myPrice price myVendor vendor myID sku publicoverridestringToString StringBuilderchairSB newStringBuilder chairSB AppendFormat ITEM Chair chairSB AppendFormat tVENDOR 0 myVendor chairSB AppendFormat tPRICE 0 myPrice ToString returnchairSB ToString staticvoidMain ChairmyChair newChair 120 0 Broyhill 60 1222 Console WriteLine myChair ToString 定制Equals 比较两个引用类型的对象时 当它们指向相同的对象 返回true 如果基于值来比较对象时 必须覆盖该方法 String类就是这样一个例子 其虽然是引用类型 但它会基于字符串中的字符串完成比较 usingSystem publicclassChair privatedoublemyPrice privatestringmyVendor myID publicChair doubleprice stringvendor stringsku myPrice price myVendor vendor myID sku publicoverrideboolEquals objectobj if obj null returnfalse if this GetType obj GetType returnfalse ChairotherObj Chair obj if myVendor Equals otherObj myVendor returnfalse if myPrice Equals otherObj myPrice returnfalse if myID Equals otherObj myID returnfalse returntrue publicoverrideintGetHashCode returnmyID GetHashCode staticvoidMain ChairmyChair newChair 120 0 Broyhill 60 1222 ChairnewChair newChair 120 0 Broyhill 60 1222 booleq myChair Equals newChair Console WriteLine eq ToString 覆盖GetHashCode GetHashCode方法为对象生成一个Int32类型的散列码 NET要求两个相同的对象必须有相同的散列码 不同的对象不保证有不同的散列码 Equals方法必须和GetHashCode方法成对出现 克隆来创建对象副本 Object中的MemberwiseClone 默认返回对象的一个副本 是一种浅拷贝 可以实现自已的克隆方法进行深拷贝 不能克隆基本类型 可克隆的类必须实现ICloneable接口 publicinterfaceICloneable ObjectClone usingSystem publicclassChair ICloneable privatedoublemyPrice privatestringmyVendor myID publicUpholsterymyUpolstery publicChair doubleprice stringvendor stringsku myPrice price myVendor vendor myID sku publicObjectClone returnMemberwiseClone publicclassUpholstery publicstringfabric publicUpholstery stringfab fabric fab classMyApp staticvoidMain ChairmyChair newChair 120 0 Broyhill 60 1222 ChairchairClone Chair myChair Clone boolisEqual isEqual Object ReferenceEquals myChair chairClone Console WriteLine isEqual ToString isEqual Object ReferenceEquals myChair myUpolstery chairClone myUpolstery Console WriteLine isEqual ToString 什么是序列化 Profile对象 界面语言 英语 RssFeed对象 存储介质 存储 序列化是将对象的状态存储到特定存储介质中的过程 代理服务器 特性 Serializable abstractclassFeedBase 标识这个类是可序列化的 可序列化就是这个类的一个特性 描述性关键字对程序中的元素如 类 字段 方法 属性命名时以Attribute结尾 SerializableAttribute使用时省略Attribute publicsealedclassSerializableAttribute 特性其实是一个类 可在类成员附加 NonSerialized 属性 将其排除在串行化范围之外 publicclassChair NonSerialized publicdoublemyPrice publicstringmyVendor myID publicChair publicChair doubleprice stringvendor stringsku myPrice price myVendor vendor myID sku 使用序列化 fileStream newFileStream profile bin FileMode Create BinaryFormatterbf newBinaryFormatter bf Serialize fileStream Profile Serializable abstractclassFeedBase 要存储的对象标记为可序列化 包括他的父类和属性的类 使用二进制方式存储对象 二进制格式化器 将对象以二进制方式格式化为流 Serialize StreamserializationStream Objectgraph 流 对象 Serialize的用法 序列化的过程 格式化程序 对象可否序列化 子类成员可否序列化 将对象格式化 写入存储介质 异常退出 序列化对象中的子类成员 Y Y N N 反序列化 把Profile对象存储成文件 怎么取出来呢 读取 反序列化则是从特定存储介质中的数据重新构建对象的过程 存储介质 Profile对象 界面语言 英语 RssFeed对象 代理服务器 数据转换为对象 使用反序列化 将序列化好的Profile数据反序列化为对象 fileStream newFileStream profile bin FileMode Open BinaryFormatterbf newBinaryFormatter Profile Profile bf Deserialize fileStream 将指定流反序列化 类型转换 publicObjectDeserialize StreamserializationStream Deserialize的用法 流 对象 需要类型转换 usingSystem usingSystem Runtime Serialization Formatters Binary usingSystem IO Serializable publicclassChair publicdoublemyPrice publicstringmyVendor myID publicChair publicChair doubleprice stringvendor stringsku myPrice price myVendor vendor myID sku classMyApp staticvoidMain ChairmyChair newChair 100 0 Broyhill 10 09 FileStreamfs newFileStream C chairs dat FileMode Create BinaryFormatterbf newBinaryFormatter bf Serialize fs myChair fs Close ChairnewChair newChair fs newFileStream C chairs dat FileMode Open newChair Chair bf Deserialize fs Console WriteLine newChair myPrice ToString newChair myVendor newChair myID 串行化事件 这些事件处理程序在被串行化的对象中实现 必须满足以下两个要求 必须为方法附加与事件相关的属性方法必须有以下签名 void StreamingContextcontext 例如 OnDeSerialized voidOnMyDeserialized StringContextcontext 注 需加上usingSystem Runtime Serialization 处理串行化对象的版本变化 如果删除了原对象的一个字段 格式化器只是忽略逆串行化流中的多余数据 Serializable publicclassChair publicdoublemyPrice publicstringmyVendor myID Serializable publicclassChair publicstringmyVendor myID 如果原对象增加了新字段 格式化器发现新字段后 会抛出异常 NET2 0 Serializable publicclassChair publicdoublemyPrice publicstringmyVendor myID Serializable publicclassChair publicstringmyVendor myID 可以为新字段附加 OptionalField 属性 格式器会为新字段指定一个默认值 Serializable publicclassChair OptionalField publicdoublemyPrice publicstringmyVendor myID 还可以利用逆串行化事件为新字段赋值 OnDeserialized voidOnMyDeserialized StreamingContextcontext if myVendor Lane finish OaK elsefinish Cherry 反射 可以ILDasm反编译工具浏览一个dll和exe的构成 这种机制叫做反射 Reflection 应用程序或dll 类的属性 类的方法 应用程序信息 用于在运行时通过编程方式获得类型信息 反射 现场演示 通过代码演示获取dll的版本号 usingSystem Reflection classProgram staticvoidMain string args stringversion Assembly LoadFile D MyNewsReader exe GetName Version ToString Console WriteLine version 引入命名空间 反射 什么是设计模式 模式就是得到很好研究的范例 走为上 围魏救赵 声东击西 设计模式是软件开发过程中经验的积累特定问题的经过实践检验的特定解决方法 简单工厂模式 简单工厂模式的原理 简单工厂模式 工厂类 担任这个角色的是工厂方法模式的核心 含有与应用紧密相关的商业逻辑 工厂类在客户端的直接调用下创建产品对象 它往往由一个具体的类实现 抽象产品角色 担任这个角色的类是由工厂方法模式所创建的对象的父类 或她们共同拥有的接口 一般由接口或抽象类实现 具体产品角色 工厂方法模式所创建的任何对象都是这个角色的实例 由具体类实现 简单工厂模式优缺点 模式的核心是工厂类 这个类负责产品的创建 而客户端可以免去产品创建的责任 这实现了责任的分割 但由于工厂类集中了所有产品创建逻辑的 如果不能正常工作的话会对系统造成很大的影响 如果增加新产品必须修改工厂角色的源码 设计模式的意义 提高软件的可复用性 灵活 适应软件设计的变化 面向对象在实际应用中集中体现 简单工厂模式实例 父类产品 子类产品A 子类产品C 工厂 客户 publicinterfaceIApparel stringShowMe publicclassSportShirt IApparel publicstringShowMe return SportsShirt publicclassDressShirt IApparel publicstringShowMe return DressShirt publicclassApparelFactory publicIApparelCreateApparel stringapptype switch apptype case DRESSSHIRT returnnewDressShirt case SPORTSSHIRT returnnewSportsShirt returnnull ApparelFactory newApparelFactory IApparelobj1 factory CreateApparel DRESSSHIRT IApparelobj2 factory CreateApparel SPORTSSHIRT stringshirtType obj1 ShowMe 为什么需要抽象工厂设计模式 简单工厂设计模式原理结构 什么是抽象工厂设计模式 什么是抽象工厂设计模式 抽象工厂设计模式原理结构 什么是抽象工厂设计模式 抽象工厂角色 担任这个角色的是工厂方法模式的核心 它是与应用系统的商业逻辑无关的
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 南京市2025江苏南京市城建中等专业学校南京市城建职业培训中心南京市建筑职工笔试历年参考题库附带答案详解
- 东莞市2025广东东莞市城建工程管理局招聘聘用人员10人笔试历年参考题库附带答案详解
- 2025河北新质科技有限公司招聘13人笔试参考题库附带答案详解
- 2025春季甘肃酒泉市敦煌文旅集团有限公司招聘26人笔试参考题库附带答案详解
- 2025年第2批次浙江宁波前湾产业集团有限公司招聘9人笔试参考题库附带答案详解
- 2025年合肥包河区人力资源开发有限公司招聘3人笔试参考题库附带答案详解
- 2025天津新誉资产管理有限公司所属运营类企业选聘干部人才6人笔试参考题库附带答案详解
- 2025四川长虹电源股份有限公司招聘试验技术主办岗位32人笔试参考题库附带答案详解
- 危险源安全管理培训课件
- 危险化学企业安全培训课件
- 医学装备质量管理分析报告
- Unit 3 Understanding ideas The Road to Success课件 2023-2024学年高中英语外研版选择性必修第一册
- 项目需求分析文档(模板)
- 国际机场飞机维修机库施工组织设计
- 液压泵站使用说明书
- E190飞机舱门开关
- 儿科学腹泻病
- GB/T 3871.9-2006农业拖拉机试验规程第9部分:牵引功率试验
- GB/T 3836.4-2021爆炸性环境第4部分:由本质安全型“i”保护的设备
- GB 17840-1999防弹玻璃
- 文学鉴赏-课件
评论
0/150
提交评论