当前位置: 首页 > news >正文

揭阳东莞网站建设免费域名申请与解析

揭阳东莞网站建设,免费域名申请与解析,我有一个域名怎么做网站,wordpress 建站案例核心机制 第二十章 异常和状态管理 什么是异常#xff1a;异常指成员没有完成它的名称所宣称的行动#xff1b;异常是程序运行过程中用来表示错误并处理的机制#xff0c;错误可以是更广义的#xff0c;包括程序中未捕获的问题或逻辑缺陷。异常处理机制#xff08;try-c…核心机制 第二十章 异常和状态管理 什么是异常异常指成员没有完成它的名称所宣称的行动异常是程序运行过程中用来表示错误并处理的机制错误可以是更广义的包括程序中未捕获的问题或逻辑缺陷。异常处理机制try-catch-finally结构 try块放入可能引发异常的代码需要得体的进行恢复和/或清理的代码一个try块至少要有一个关联的catch块或finally块一个try块中放多少代码取决于状态管理如果一个try块中执行多个可能抛出同一个异常类型的操作但不同的操作有不同的异常恢复措施就应该每个操作放在自己的try块中尽量将 try块的范围缩小到只包含可能会引发异常的代码。catch块负责异常恢复的代码如果try块中的代码没有抛出异常就不会执行catch块catch关键字后的圆括号中的表达式称为捕捉类型捕捉类型必须是System.Exception或它的派生类型CLR自上而下搜索匹配的catch块所以较具体的异常应放在顶部如果放反编译器会因无法抵达报错try块中的代码抛出异常时CLR搜索类型与抛出的异常相同的catch块如同没有则去调用栈更高一层搜索如果到了调用栈的顶部还是没有则抛出未处理的异常一旦CLR找到匹配的catch块就会执行内层所有finally块中的代码CLR 会按照调用栈逐步寻找匹配的catch块寻找过程中每次离开一个try块都会执行该try块对应的finally块中的代码。内层finally块执行完毕后匹配到异常的catch块中的代码才会开始执行该块的finally还要等这个catch块执行完毕才会执行在catch块的末尾我们可以选择: 重新抛出相同的异常抛出一个不同的异常从catch块退出(进入finally) C#允许在捕捉类型后指定一个变量catch块的代码可以引用这个变量来访问异常的具体信息如stack trace这个变量可以修改但最好把它当作只读的finally块保证会执行的代码一般用于资源清理finally块不是必须的但只能出现一个且必须在所有catch块之后执行完finally后会执行紧跟finally之后的语句 CLR允许抛出任何类型的实例但CLS规定必须能抛出和捕捉派生自System.Exception类型的异常访问Exception的StackTrace属性实际会调用CLR中的代码初始化Exception对象时StackTrace被初始化为null一个异常抛出时CLR记录抛出的位置throw指令一个catch块捕捉到异常时CLR记录捕捉位置访问StackTrace属性会创建一个字符串指出从抛出位置到捕捉位置的所有方法当一个异常被抛出或者重新抛出时Windows 会处理异常的堆栈起点如果一个异常成为未处理的异常那么向windows error reporting报告的栈位置就是最后一次抛出或重新抛出的位置而不是异常实际发生的地方要获取完整的堆栈跟踪需要用到StackTrace类可以使用Exception对象构造实现自己的方法时抛出异常要考虑应该选择一个有意义的Exception派生类型不要抛出Exception类型向异常类型的构造器传入详细说明为什么无法完成任务的字符串消息定义自己的异常类要注意定义浅而宽的异常类型层次结构类型应该可序列化错误不经常发生开发人员不去追求完全可靠的代码牺牲一定的可靠性来换取程序员开发效率的提升如果确定状态已经损坏到无法修复的程度应该销毁所有损坏的状态防止它造成更多的伤害然后重启程序重新初始化到良好的状态如果整个进程需要终止应该使用Environment.FailFast方法这个方法终止进程时不会运行任何活动的try/finally块或Finalize方法它将消息字符串和可选的异常写入windows application事件日志、生成Windows错误报告、创建内存转储dump然后终止当前进程设计规范类库开发人员不要想当然地决定错误情形应该让调用者自己决定 使用finally块清理已成功的操作再返回至调用者或者执行之后的代码利用finally块显式释放对象以避免资源泄露使用lock、using、foreach、析构器时编译器会自动生成try/finally块不要什么都捕捉不要捕捉了System.Exception后不再抛出否则应用程序不知道出了什么错还会继续运行一些可以预料的异常可以得体地从异常中恢复并继续运行发生不可恢复的异常时回滚部分完成的操作为隐藏实现细节捕捉一个异常并重新抛出不同的异常不利于调试慎用 异常抛出时没有任何catch块匹配抛出的异常类型就发生一个未处理的异常。进程中的任何线程有未处理的异常都会终止进程windows会向事件日志写一条记录。异常处理是必须的同时也是有代价的频繁调用但频频失败的方法抛出异常所造成的性能损失可能是无法接受的定义类型的成员时应确保在一般使用情形中不会失败只有当用户因抛出异常对性能不满意时才考虑添加一些TryXXX方法帮助改善性能。例Int32的Parse和TryParse方法约束执行区域CER用于在某些特殊场景下保证代码的执行具有更高的可靠性即使在不可控的异常如内存不足或线程被终止发生时也能尽可能确保特定的代码能够完整执行普通的异常处理机制try-catch-finally在面对某些不可控异常时可能会失败而 CER 提供了额外的安全性。 RuntimeHelpers.PrepareConstrainedRegions() 用于定义 CER 的起始点通知 CLR 在进入 CER 前准备好所有资源CER 中所有可能执行的代码都会在进入 CER 前完全 JIT 编译。ReliabilityContractAttribute 用于标记方法的可靠性契约声明某个方法在 CER 内部的行为但是编译器和CLR并不验证代码是否符合ReliabilityContractAttribute 作出的保证 代码协定(Code Contracts)用于定义代码的行为和约束条件可以将前条件、后条件、对象不变性想象为方法签名的一部分。代码协定本质上是对代码逻辑的一个明确声明这些声明可以在运行时检查也可以在静态分析中验证。现在一般用断言Assertions进行条件验证。
http://www.w-s-a.com/news/290/

相关文章:

  • 商城网站设计费用网络公司怎样推广网站
  • 视频公司的网站设计工图网
  • 免费快速网站十八个免费的舆情网站