Effective C# Item4:使用Conditional特性代替#if条件编译
2010-01-03 15:11
281 查看
条件编译的目的:希望同样的代码在不同的环境中生成不同的结果,最典型的情况就是在Debug模式和Release模式下,能够产生不同的编译结果。
C#中,针对上述情况,有两种解决方案:1. 旧有的#if、#endif方式;2. 使用Conditional特性。
#if方式存在的问题:
如果在代码中以“流水账”的方式添加#if,很容易造成代码可读性差,在发生错误后,很难进行调试。
如果有一段代码,你只希望在Debug模式下才会被调用,简单的方式就是将这段代码重构成方法,然后在方法的开始和结束处添加#if和#endif,这样做可以实现,但是效率很差,即使在Release模式下,也会调用这个方法,虽然这时的方法只是一个空方法。
如果代码中充满了#if和#endif,很容易造成同样的代码在不同模式下运行结果不一样,出现异常情况。
使用Conditional特性,可以带来的好处:
Conditional特性作用在方法级别上,这样最后生成的代码比较清晰,可读性强。
Conditional特性作用的方法,如果当前环境变量中的值和Conditional特性中的值不一致时,Conditional特性作用的方法是不会被执行的,和#if方式相比,这种方式的性能会更好一些。
使用Conditonal特性,需要注意:
Conditional特性中可以为环境变量设置多个值,在执行时,这多个值之间,是OR的关系。
如果希望在条件编译时,同时满足环境变量中的多个值,才会执行某段逻辑,即条件编译使用的环境变量的值是多个,且多个值之间是AND的关系,那么只能使用#if的方式。
Conditional特性作用的方法,其返回值只能是void类型,不能是其他类型。
我认为这两种用于条件编译的方式,没有本质的区别。对于一个不成熟的程序员来说,即使使用Conditional特性,也不能完全解决#if带来的问题,例如代码可读性、代码的二义性,这个Conditional特性,更像是一个“语法糖”。
C#中,针对上述情况,有两种解决方案:1. 旧有的#if、#endif方式;2. 使用Conditional特性。
#if方式存在的问题:
如果在代码中以“流水账”的方式添加#if,很容易造成代码可读性差,在发生错误后,很难进行调试。
如果有一段代码,你只希望在Debug模式下才会被调用,简单的方式就是将这段代码重构成方法,然后在方法的开始和结束处添加#if和#endif,这样做可以实现,但是效率很差,即使在Release模式下,也会调用这个方法,虽然这时的方法只是一个空方法。
如果代码中充满了#if和#endif,很容易造成同样的代码在不同模式下运行结果不一样,出现异常情况。
使用Conditional特性,可以带来的好处:
Conditional特性作用在方法级别上,这样最后生成的代码比较清晰,可读性强。
Conditional特性作用的方法,如果当前环境变量中的值和Conditional特性中的值不一致时,Conditional特性作用的方法是不会被执行的,和#if方式相比,这种方式的性能会更好一些。
使用Conditonal特性,需要注意:
Conditional特性中可以为环境变量设置多个值,在执行时,这多个值之间,是OR的关系。
如果希望在条件编译时,同时满足环境变量中的多个值,才会执行某段逻辑,即条件编译使用的环境变量的值是多个,且多个值之间是AND的关系,那么只能使用#if的方式。
Conditional特性作用的方法,其返回值只能是void类型,不能是其他类型。
我认为这两种用于条件编译的方式,没有本质的区别。对于一个不成熟的程序员来说,即使使用Conditional特性,也不能完全解决#if带来的问题,例如代码可读性、代码的二义性,这个Conditional特性,更像是一个“语法糖”。
相关文章推荐
- 改善C#程序的50种方法 条款4:使用Conditional特性代替#if条件编译
- 条款4:使用Conditional特性代替#if条件编译
- Effective c# Item4:使用Conditional特性代替#if条件编译
- 条款4:使用Conditional特性代替#if条件编译
- 条款4:使用Conditional特性代替#if条件编译
- 使用Conditional特性代替#if条件编译
- 条款4:使用Conditional特性代替#if条件编译
- Effective C# Item4:使用Conditional特性代替#if条件编译
- 【C#高效编程50例】条目4: 使用Conditional特性而不是#if条件编译
- C# 使用Conditional特性而不是#if条件编译
- C#条件编译选项:Conditional(代替#if...#endif)
- 提高C#编程水平的50个要点 之四“使用条件属性 (Conditional Attributes) 来代替条件编译语句 #if”
- C#条件编译选项:Conditional(代替#if...#endif)
- C#条件编译选项:Conditional(代替#if...#endif)
- C#条件编译选项:Conditional(代替#if...#endif)
- Effective C# 使用Conditional属性来代替IF/ENDIF程序块
- 使用Conditional属性来代替IF/ENDIF程序块
- 重构指南 - 使用多态代替条件判断(Replace conditional with Polymorphism)
- hive中使用case、if:一个region统计业务(hive条件函数case、if、COALESCE语法介绍:CONDITIONAL FUNCTIONS IN HIVE)
- 4. 使用条件属性 (Conditional Attributes) 来代替条件编译语句 #if