C#编码规范

术语和定义

  • 规则
    编程时必须遵守的约定。
  • 原则
    编程时指导性的约定。

代码布局

  • 当代码行或表达式超出或即将超出单屏显示时,需要换行。
  • 缩进应该是每行一个Tab(4个空格)
  • 接口和类定义之间、枚举和类定义之间、类和类定义之间至少空一行。
  • 以下情况使用一个空行:1.方法与方法;2.方法中不同的逻辑块之间、方法与字段之间。
  • 以下情况使用一个空格:1.关键字和左括号;2.多个参数用逗号隔开,每个逗号后都应加一个空格;3.所有的二元操作符都应用空格与他们的操作数隔开。一元操作符、++及--与操作数间不需要空格。4.语句中的表达式之间用空格隔开。
  • 方法名和左括号间没有空格
    *1.左花括号"{"放于关键字或方法名的下一行并与之对其,左花括号"{"要与相应的右花括号"}"对齐。2.通常情况下左花括号"{"单独成行,不与任何语句并列一行。3.if、while、do语句后一定要使用{},即使{}号中为空或只有一条语句。

命名规范

在命名规范中强调对称性和2/8原则,变量、常量、枚举、函数和语句在成对出现时请注意对称性。互补的命名方式更容易让人理解和联想。20%的代码相对于剩下80%的代码显得更加重要。例如对外API的命名比私有函数的命名更加值得关注;作用域小的变量命名相对于全局变量的命名可以更加自由。

  • 在变量名中使用互补对,用正确的反义词或词组命名具有互斥意义的变量。
  • 对于缩写有两个字母组成的标识符,所有字母大写,仅在开发人员一般都能理解时使用缩写。
  • 使用复数形式命名集合属性,以肯定短语来命名布尔属性。
  • 对于事件命名用动词或动词短语。使用动名词(动词的"ing"形式)创建表示事件前概念的事件名称,用过去式表示事件后的概念。不要使用"Before"或者"After"前缀或后缀来表示事件的先后。
  • 命名空间使用公司或项目名称,后跟技术名称和可选的功能与设计。
  • 特性命名应该总是将后缀Attribute添加到自定义特性类
  • 不要为委托增加"Delegate"后缀,对事件处理程序名称使用EventHandler后缀。

注释

  • 注释使用中文
  • 通过对方法、变量、结构等正确的命名以及合理的组织代码结构,使代码成为自注释的。
  • 提倡大段的功能性的注释,只要把实现的主要思想和流程写清楚就可以,没有必要每一句都加上注释。
  • 代码和注释要同步维护,不再有用的即时删除,特别是错误的注释一定要删除。
  • 注释应与其描述的代码相近,对代码的注释可放在其上方位置,需与其上面的代码用空行隔开;也可与代码同行,但不可放在代码下方。
  • 一般情况下,代码中有效注释量不少于代码量的20%,最低不得少于代码量的10%。
  • 注释与所描述内容进行同样的缩进。
  • 对于供外部使用的API按照.NET指定的"///"注释格式对.NET代码进行注释。
  • 文件头部必须进行注释。

可测性

  • 在编写代码之前,应预设设计好程序与测试的方法和手段,并设计好各种调测开关及相应测试代码(如打印函数等)。

  • 签入主干的代码不能存在临时的调试代码以及大段被注释掉的代码

  • 开发人员对自己编写以及修改的代码必须做到单步调试,调试的要求是需要做到路径覆盖,并跟踪每一条语句。s

断言和错误处理

  • 整个软件系统采用统一的断言,使用断言捕捉不应该发生的非法情况。

    断言是用来处理不应该应该的错误情况的,通常用于捕获程序内部不可能发生的错误,而外部可能会产生的错误通常用异常处理方式,不能用断言来实现。

private StartAdjState ToStart()
{
  ...
  if(isStarting)
  {
    Debug.Assert(false);
    return StartAdjState.InvalidServoType;
  }
}

private StartAdjState ToStart()
{
  ...
  if(isStarting)
  {
    Trace.WriteLine("伺服为启动状态", "Warning");
    return StartAdjState.InvalidServoType;
  }
}

【特别说明】
上面给出了断言和错误处理的原则,但是并不是每一个地方我们都需要进行相关断言处理,否则断言和异常处理太多,一是会影响代码的可读性,同时也会增加很多不必要的预防成本。我们可以把某些接口选定为安全区域的边界(模块或是dll提供的外部接口),对穿越安全区域边界的数据进行合法性校验,并当数据异常时做出错处理。模块外部传入的数据,我们必须对输入数据的合法性进行检测,一旦数据通过了合法性检测,进入模块内部,我们可以假定数据是正确的,此时不需要重复去做一些数据合法性检测。同理,对于一个模块输出给外部模块使用的数据,必须对输出数据的合法性进行检测,但是如果这个输出数据只在内部使用,我们可以只做一些非常有必要的检测。
在类的层次我们也可以采用这个方法,类的公用方法假定数据是不安全的,他们负责检查数据并进行处理,一旦公用方案
接收了数据,那么类的私有方法就可以假定数据是安全的。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 214,172评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,346评论 3 389
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 159,788评论 0 349
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,299评论 1 288
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,409评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,467评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,476评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,262评论 0 269
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,699评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,994评论 2 328
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,167评论 1 343
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,827评论 4 337
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,499评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,149评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,387评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,028评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,055评论 2 352