8
11
2015
0

[Effective C#] Item 4: Use Conditional Attributes Instead of #if


使用Conditional特性代替#if编译指令。

其实我两个都不会用。。

C++程序员大都很熟悉#ifdef,#ifndef,#if,#else,#elif,#endif这几个条件编译指令,C#中也有类似的指令——#if,#else,#elif,#endif。它们往往用来从同一份代码生成不同的程序版本,如Debug版本和Release版本。

下面是一个例子。

在Release版本中,将生成一个空的checkState方法。不过,该方法还是存在的,所以在运行时会因为空的方法调用而产生轻微的性能损失。

#if指令看起来很好用,但是,它很可能产生下面这样的错误。

显然,#endif的位置放错了一行,这份代码在Debug版本中会正常工作,但在Release版本中将会输出非预期的空行。

相对于#if,C#提供了更好的解决方案:Conditional特性。它强迫开发者把调试代码放在单独的方法内,从而防止出错并提高性能。

下面是用Conditional特性实现的checkState方法。

如果使用上面这份代码,在Release版本中,checkState方法并不会改变,但编译器会去掉所有对checkState方法的调用。

注意,Conditional特性只能应用到返回值为void的方法上。为了防止有可能的错误,一般也不要应用到带参数的方法上。

Category: C#及OOP | Tags: Effective C# | Read Count: 360

登录 *


loading captcha image...
(输入验证码)
or Ctrl+Enter

Host by is-Programmer.com | Power by Chito 1.3.3 beta | Theme: Aeros 2.0 by TheBuckmaker.com