1.使用属性而不是可访问的数据成员

2.用运行时常量(readonly)而不是编译期常量(const)

编译期常量与运行时常量行为的不同之处在于对他们的访问方式不同,编译期常量的值是在目标代码中进行替换的。运行时常量将在运行时求值。

编译期常量仅能用于数字和字符串。运行时常量也是一种常量,因为在构造函数执行后不能被再次修改。二者的区别在于,只读的值将在运行时给出,这必然会带来更好的灵活性。

3.推荐使用is或as操作符而不是强制类型转换

as操作符并不能配合值类型使用。

object o=Factory.GetObject();
MyType t = null;
if(o is MyType)
t = o as MyType

  这个例子并不高效,且有些累赘。若你准备使用as进行类型转换,那么is检查就毫无必要,只要检查返回值是否为null即可。

使用强制类型转换,我们需要同时检查其是否为null并捕获异常,若是as只需要检查返回的引用是否为null即可。

4.使用Conditional特性而不是#if条件编译

条件编译将会在最终release版本中留下一个名为***()的空方法,但它在release和debug版本中都将被调用。虽然在release版本中什么都不做但是方法的加载、JIT编译和调用仍旧有些开销。

使用Conditional特性

[Conditional("DEGUB")]
private void CheckState()
{
//check code
}

注意:Conditional特性方法都返回void类型且不接受任何参数。

使用Conditional特性生成的IL要比使用#if是更有效。同时,将其限制在函数层面上可以更加清晰的将条件性的代码分离出来。

C#语言使用习惯的更多相关文章

  1. C 语言编程习惯总结

    笔者能力有限,如果文中出现错误的地方,还请各位朋友能够给我指出来,我将不胜感激,谢谢~ 引言 编程习惯的培养需要的是一个长期的过程,需要不断地总结,积累,并且我们需要从意识上认识其重要性,一个良好的编 ...

  2. 华为C语言编程规范

    DKBA华为技术有限公司内部技术规范DKBA 2826-2011.5C语言编程规范2011年5月9日发布 2011年5月9日实施华为技术有限公司Huawei Technologies Co., Ltd ...

  3. Go 语言编写单元测试

    吾尝终日而思矣,不如须臾之所学也:吾尝跂而望矣,不如登高之博见也.登高而招,臂非加长也,而见者远:顺风而呼,声非加疾也,而闻者彰.假舆马者,非利足也,而致千里:假舟楫者,非能水也,而绝江河.君子生非异 ...

  4. c语言数据类型(一)

    (强数据类型) 1.常量 常量是程序中不可变的量 10为常量 两种常量 #define 定义宏常量 const #对于#define 类型的常量,c语言的习惯是常量名称大写, 对于普通const常量以 ...

  5. [日常] Go语言圣经--作用域,基础数据类型,整型

    go语言圣经-作用域 1.一个声明语句将程序中的实体和一个名字关联,比如一个函数或一个变量 2.一个变量的生命周期是指程序运行时变量存在的有效时间段;声明语句的作用域对应的是一个源代码的文本区域,它是 ...

  6. 2_C语言中的数据类型 (一)2.1.常量和字符串常量

    2.1 常量就是在程序中不可变化的量,常量在定义的时候必须给一个初值. 1.1.1          #define 定义一个宏常量 1.1.2          const 定义一个const常量 ...

  7. GO_01:Linux-CentOS之Go语言环境配置

    1.下载安装 下载当前最新版本,通过wget命令,当然你也可以手动下载之后再传入到Linux中,都可以. 本文安装的是1.8版本.由于Go语言的要求,需要配置gopath,而对应再gopath里按照g ...

  8. Lua脚本语言基础知识

      注释 在Lua中,你可以使用单行注释和多行注释. 单行注释中,连续两个减号"--"表示注释的开始,一直延续到行末为止.相当于C++语言中的"//". 多行注 ...

  9. R 语言赋值运算符:`<-` , `=`, `<<-`

    <- 与 = 间的区别 <- 与 = 在大部分情况下是应该可以通用的.并且,相对于 <<- 运算符,它们的赋值行为均在它们自身的环境层(environment hierarch ...

随机推荐

  1. springMVC绑定json参数之二(2.2.2)

    二.springmvc 接收不同格式的json字符串 2).格式二:json字符串数组 前台: test = function () { var test = ["123",&qu ...

  2. Java探索之旅(3)——选择与循环

    1.选择结构与输出 ❶Switch语句: Switch表达式必须算出 char,byte,short,int类型数值之一,总是括号括住:Value1----ValueN,对应有相同数据类型且为常量或者 ...

  3. CentOS 7 安装 Zabbix 3.0

    CentOS7搭建Zabbix 一.安装数据库: 1.  安装数据库:sudo  yum  grouinstall mariadb –y 2.  启动数据库:sudo systemctl  start ...

  4. [Manacher+bit]Palindrome

    https://nanti.jisuanke.com/t/15428 题目大意:离散表示的字符串,求其最长回文串长度. 解题关键:若只用Manacher算法,在统计sum时会超时,所以加一个树状数组来 ...

  5. Web项目的导出和部署

    -----------------siwuxie095                                 Web 项目的导出     工程结构目录如下:                 ...

  6. mongodb 查询数据

    MongoDB概念解析: 等同于SQL的数据库表:collectiondocument:等同于SQL的数据记录行field:等同于SQL的数据字段表连接,MongoDB不支持主键,MongoDB自动将 ...

  7. Flask11 Session、CSRF、注销session、利用端点自动跳转

    1 怎么对存储的cookie数据进行加密 利用response对象去设置cookie时,存储到浏览器中的cookie数据都是明文的,容易被一些计算机爱好者利用:利用session存的cookie数据可 ...

  8. p4503&bzoj3555 企鹅QQ

    传送门(洛谷) 传送门(bzoj) 题目 PenguinQQ是中国最大.最具影响力的SNS(Social Networking Services)网站,以实名制为基础,为用户提供日志.群.即时通讯.相 ...

  9. sublime text 3如何安装插件和设置字号

    使用ctrl + ~(这个符号是键盘上1前面那个),如果不能调用出就需要修改快捷键,在Preferences ->Key Bindings - Default打开文件后,大概在248行,这里我修 ...

  10. ibatis知识点汇总

    一个参数,返回Map <select id="getShopInfo" parameterClass="java.lang.String" resultC ...