在进行CAD二次开发的时候,看到参考书出现了Debug.Assert()语法,就又激发了我的兴趣!这倒是是啥意思呢?于是乎我搜了文档和网上一些大佬的说法,算是基本清楚了!现在我就把我的理解总结一下!
目录
1.前言
断言作为调试和交流的辅助,断言可以帮助开发者理解代码所做的假设;断言可以在距离bug最近的地方抓住它们。
看到上面这里你是不是还是不清楚?其实你完全可以先把他理解成异常处理try....catch。想想你都什么时候用异常处理呢?那么肯定是你怀疑这段代码可能出现bug,为了避免出现中断异常,就在这段代码外套一个try..catch。这样打包后如果真出问题了!至少外人看不出,你的程序也会很友好的给予提示!
别想太复杂,简单的理解assert干的就是try...catch的事,只是try...catch是为了发生错误的时候让用户用起来舒服点,assert是发生错误的时候让作为程序员的你好排查!
但是关于Assert的一些注意事项还是要了解的!请继续阅读!
2.Assert断言注意事项
例如:
假设已编写一个整数除法函数。 根据数学规则,除数绝不能为零。 可使用断言来对此进行测试:
int IntegerDivide ( int dividend , int divisor )
{
Debug.Assert ( divisor != 0 );
return ( dividend / divisor );
}
请注意,在创建代码的发布版时,对 System.Diagnostics.Debug.Assert 方法的调用会消失。 这意味着检查除数不为0的断言会在发布版中消失!就是说如果你在调试阶段设置的assert,在发布时候是完全不存在的【C#有发布版本的断言,可以自行文档,但是常用的是这个】,
这一方面减少了发行版本中的开销!另一方面,也带来了一个你要注意的问题:
debug时没问题!release就报错!
3.常用Assert断言方法的重载
4.断言与异常处理的区别:
①断言是用来帮助开发人员对问题的快速定位。
②异常处理用于对程序发生异常情况的处理,使用中对用户不有好的行为,不让(通常也不必)用户知道发生了什么错误。
实际开发中,我们通常将Assert与异常混淆, 不知道什么时候使用Assert,什么时候使用异常处理。或者不用Assert,将一切情况都归为异常。这样一来,就掩盖了问题,当问题发生的时候,很难进行定位,而这些问题本该是在开发的时候就解决掉的。同时,也增加了开销。
(在c#中,debug.Assert()编译成release版本时,不会产生任何代码,而try/catch在debug/release版本中都是有代码产生,运行时需要开销)。