防御式程序设计
所谓的防御式程序设计并不是增强程式的防御,这样是没有用的。有太多种位置的输入域状况可能会出现。如何在已知、位置的环境中,程序对于正确、错误输入的反应,才是真正的防御式程序设计。
下面我们就从型别转换、例外处理三方面来讨论防御式程序设计。
(一)、型别转换
每个值都有相关的型别,该型别定义属性,例如配置给值的空间量、能够拥有的可能值范围,以及提供的成员。许多值都可以表示成多种型别的。例如,数值4可以表示成整数值或浮点值。型别转换建立新型别的值,与原型别的值相等,但不一定会保留原使物件实际的值。当编译器检测到不安全的转换时,便会发生错误或是警告,这就需要我们最好明确型别转换,便可以在设计时期检查出错误。
(二)例外处理
所谓的例外就是发生了预期之外的状况,包括除零错误、数值溢出、存取阵列超过界限、物件参考和档案不存在、无法存取资料库等。在net中的例外被视为是物件而不是错误的程序,它可以透过扔出(Throw)的方式被引发,透过Catch的方式被捕获。
例外物件的型别代表例外的种类。例外的种类主要包括System.SystemException(系统定义的例外)、System.ApplicationException(使用者定义的例外)。
如果可能的话,大家希望可以处理所有的例外,至少要记录下例外的信息。.
在vb.net中处理例外的方法为使用try-catch语句:
格式:try
Catch ex As Exception
End try
使用此语法可能出现两种流程:
1) 如果没有例外发生,将跳过Catch区域直接执行statement6
2) 如果有例外发生,程序将立刻跳入catch区域中
假设例外是发生在档案开启之后的,此时档案仍然为开启状态,因为没有执行开关档案的程序码,则可以使用try –catch-finally语法解决。根据预设,执行完catch区域中的程序码后,程序将继续执行,使用的解决方式为System.Environment.Exit跳出程序,或者用之处(throw)例外。我们还可以针对例外处理进行最佳化,举例来说,可以使用不同的例外类别进行筛选,将执行第一个Catch到的程式码区域。
在类别设计中,不必试着去解决例外状况,但是至少要能够捕捉、记录再掷出例外。在例外发生。的时候,不需要输出结果到屏幕上或是结束程序,但是要将发生的例外写入事件记录。
(三)、应用程式的追踪
追踪也是防御式程式设计的技巧之一,它会记录有关程式执行的信息,当例外发生时,我们就能检查错误的内容。
根据预设,这回总的结果将输出到:debug版本中将显示在真搓视窗中;在Release版本中,输出的结果将被忽略。追踪到的接听项可以为事件记录、档案或是任何你想输出的目标。
对于接听项的设定通常是在程序开始时设定。下面为接听项为“log.txt”文字档的设定。