在。NET下使用断言

1)如何在。NET下使用断言

在。NET下,有两个类提供了Assert()方法,一个是Debug,一个是Trace,他们都位于System.Diagnostics命名空间下面

他们的区别:

一般得到的回答是,在调试阶段使用Debug,在Release阶段使用Trace,因为Debug在release版本中会失效?真的么?在Release版本中真的不能使用Debug.Assert()么?

a)也是。也不是。

b)为什么说是,是从设计角度,从其不同的作为范围来说的。为什么要设计两个呢,就是为了要区分出来,一个在Debug模式下用,一个在Release下用,那么为什么非要在Release下用Debug呢。所以,从这个角度来说,在Release下是不能用Debug的。

c)为什么说不是,是从技术的角度来说的。在Release下面是完全可以使用Debug.Assert()的。

其实,真正控制Debug和Trace是否失效的,不是Debug版本还是Release版本,而是其背后的宏定义。用VS编写工程时,在Debug版本下,默认的声明了两个定义 Debug和Trace, 在Release版本下,只声明了一个定义Trace,所以在Release下Debug就失效了。 你可以任意组合这两个开关,这样就能在任意模式下使用你想使用的任意类型。 比如,你可以在Release模式下打开Debug的开关。完全可以。

除了这个方法,也可以在文件中显示的声明宏定义。格式如下:

#define DEBUG

#define TRACE

需要注意一点: 在哪个文件中使用了Assert,必须在哪个文件中包含上述的宏定义,而且宏定义必须放在文件的最开始位置,即在引用命名空间之前,否则会出编译错误。当有多个不同的文件时,必须在多个不同的文件中同时声明,否则不起作用。注意,这里说的是文件,而不是类。 一个文件中可能包含多个不同的类,这没有关系。宏定义可以在一个文件的不同类间共享,但不可在不同文件中共享。

2)什么时候使用断言,什么时候使用异常处理

上述只是说明怎么使用断言,但究竟在什么场景下使用,就是另一个问题了。

一般的理解是:如果你进行了异常捕获,但不能给出一个有效的处理方式,也即是说这种异常的捕获没有意义,这时候就应该使用断言,否则,就该使用异常。

代码大全的建议: 在永远不可能出错的地方使用断言,在其他的地方,使用异常

 

其他两个相关的文章:

http://msdn.microsoft.com/en-us/library/ttcc4x86(VS.71).aspx

http://www.codeproject.com/KB/trace/debugtreatise.aspx

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值