关于c#:C开发规范

37次阅读

共计 3444 个字符,预计需要花费 9 分钟才能阅读完成。

写在后面:本文是依据 alibaba 的 Java 开发手册以及 WPF 源码整顿的一篇实用于 C# 的开发标准。

命名格调

  1. 代码中的命名严禁应用拼音与英文混合的形式,更不容许间接应用中文的形式。
  2. 命名空间、类名、办法、属性、事件、枚举、私有动态字段、常量应用 UpperCamelCase 格调。
  3. 公有字段、参数名、局部变量应用 lowerCamelCase 格调,听从驼峰模式。
  4. 异样类名应用 Exception 结尾,测试类名以要测试的类名结尾,Test 结尾。
  5. 防止在子父类的成员变量间、不同代码块的局部变量间采纳雷同的命名。
  6. 杜绝不标准的缩写,要做到顾名思义。应用缩写时要是被广泛承受的缩写。
  7. 为达到代码自解释的指标,命名时应尽量应用残缺的单词组合表白意思。
  8. 在常量与变量命名时,示意类型的名称放在词尾:startTime, workQueue
  9. 接口类中的办法和属性不要加任何润饰符号,加上无效的正文。
  10. 接口类加 I 前缀。
  11. 枚举类名不要加 Enum 后缀,枚举成员名称应用 UpperCamelCase 格调命名。
  12. 用于事件处理的委托加 EventHandler 后缀,用于事件处理之外的委托加 CallBack 后缀。
  13. 在变量名中应用互补对,如 min/max、begin/end、open/close
  14. 不要在事件申明中应用前缀或者后缀,如应应用 Close 而不是 OnClose。
  15. 如果变量值仅在一个固定范畴内变动,应用 enum 类型定义:

    public enum Season
    {
        Spring,
        Summer,
        Autumn,
        Winter
    }
  16. 用 UI 组件缩写做 UI 变量前缀,如:

Label – lbl
TextBox – tbox
TextBlock – tblk
Button – btn
Image – img
Grid – grd
StackPanle – stkpnl

代码格局

  1. 若大括号内为空,简洁的写成 {} 即可,大括号两头无需换行和空格;如果非空代码块则左右大括号各占一行。
  2. 左小括号和字符之间不呈现空格,右小括号和字符间也不要呈现空格。
  3. if/for/while/switch/do 等保留字与括号之间必须加空格。
  4. 任何二目、三目运算符的左右两边都须要加一个空格。
  5. 采纳四个空格缩进,禁止应用 tab,可在 IDE 中设置 tab 为 4 个空格。
  6. 正文的双斜线与正文之间有且只有一个空格。
  7. 在进行类型强制转换时,右括号与强制转换值之间不须要空格。
  8. 单行字符数限度不超过 120 个,超出则换行,换行准则如下:

    1) 第二行绝对第一行缩进 4 个空格,从第三行开始,不再缩进;
    2) 运算符与下文一起换行;
    3) 办法调用的点符号与下文一起换行;
    4) 办法调用的多个参数换行时,在逗号后换行;
    5) 括号前不要换行

  9. 办法参数在定义和传入时,多个参数逗号后必须加空格。
  10. 单个办法的总行数不超过 80 行。
  11. 不须要增加若干个空格使变量的赋值等号与上一行对应地位的等号对齐。
  12. 不同逻辑、不同语义、不同业务的代码之间插入一个空行分隔开以晋升可读性。以下状况下应用一个空行:

    a. 办法与办法,属性与属性之间;
    b. 办法中变量申明与语句之间;
    c. 办法中不同逻辑块之间;
    d. 办法中的返回语句与其余语句之间;
    e. 属性与办法,属性与字段,办法与字段之间;

  13. 任何情景下,不须要插入多个空行进行隔开。
  14. 一行只做一个申明。
  15. 倡议在变量申明时就对其做初始化。
  16. 不要应用 public 的实例字段。
  17. 每行一个语句。

面向对象

  1. 所有笼罩的办法,必须加 override。
  2. 内部正在应用的接口,不容许批改办法签名,防止对接口调用产生影响。
  3. 构造函数中禁止退出任何业务逻辑,如果有初始化逻辑,请放在 init 办法中。
  4. 一个类有多个构造方法,或多个同名办法时这些办法应该按程序放在一起,便于浏览。
  5. 类内办法定义的程序:私有 > 爱护 > 公有。
  6. 属性的 get、set 办法中,不要减少业务逻辑,减少排查问题的难度。
  7. 慎用对象的 Clone 办法来拷贝对象,因为是浅拷贝,若想实现深拷贝需笼罩 Clone 办法。
  8. 类成员与办法的拜访严格控制:

    1) 如果不容许内部间接通过 new 来创建对象,构造函数必须是 private;
    2) 工具类不能有 public 构造方法;
    3) 类非 static 字段必须是 private;
    4) 类 static 如果仅在本类应用,必须是 private;
    5) 类办法如果仅供外部调用,必须是 private;
    6) 类办法只对继承类公开,限度为 protected。

  9. 不要给成员变量加任何前缀,辨别局部变量与成员变量应用 this。
  10. 类名与文件名保持一致。
  11. 类型成员的排列程序:

    1) 委托、事件申明
    2) 公共动态、常量字段
    3) 构造函数,参数越少越靠前
    4) public 办法
    5) 属性
    6) protected 办法 -> private 办法 -> internal 办法
    7) 公有字段

管制语句

  1. 一个 switch 中,每个 case 要么通过 continue/break/return 等来终止,要么正文阐明程序将执行到哪一个 case 为止。一个 switch 中,必须蕴含一个 default 语句放在最初,即便什么代码也没有。
  2. 当 switch 内的变量类型为 string 且为内部参数时,必须先进行 null 判断。
  3. 在 if/else/for/while/do 语句中必须应用大括号,即便只有一行代码。
  4. if()…else… 嵌套语句不要超过 3 层,防止代码保护艰难。
  5. 不要在条件判断语句中执行简单的语句,将简单的逻辑判断后果赋值给一个有意义的布尔值,以进步可读性。
  6. 不要在其余表达式中插入赋值语句,赋值语句应该独自成行。
  7. 循环语句要思考性能,定义对象、变量、获取数据库链接、不必要的 try-catch 等尽量移至循环体外解决。
  8. 尽量避免采纳取反逻辑运算符,不易了解。

正文

  1. 字段、属性、枚举值正文:

    /// <summary>
    /// ...
    /// </summary>
    public bool IsActive
    {...}
  2. 办法、委托正文:

    /// <summary>
    /// ...
    /// </summary>
    /// <param name="">...</param>
    /// <returns>...</returns>
    /// <remarks>(可选)
    /// ...
    /// </remarks>
    private bool Function(int param)
    {...}
  3. 类、接口正文:

    /// <summary>
    /// ...
    /// </summary>
    public class ClassName
    {...}
  4. 办法外部的单行正文,在被正文语句上方另起一行,应用 // 正文。办法外部多行正文应用 // 正文,不要应用 /**/。
  5. 所有枚举类型的字段必须要有正文,阐明数据项的用处。
  6. 代码批改的同时,正文也要相应批改。
  7. 审慎正文掉代码。在上方正文具体阐明,而不是简略的正文掉。如果无用,则删除。
  8. 好的命名、代码构造是自解释的,正文力求精简精确、表白到位。防止过多过滥的正文,否则代码一旦批改,正文的批改累赘很大。
  9. 非凡正文标记,需注明标记人与工夫。应及时处理这些标记。如:

    1) 待办(TODO):(标记人,标记工夫,[预计解决工夫])示意须要实现但暂未实现的性能;
    2) 谬误,不能工作(FIXME):(标记人,标记工夫,[预计解决工夫])错误代码且不能工作,需及时纠正。

  10. 右花括号 ”}” 后倡议增加正文,以便找到对应的 ”{“。
  11. 防止在代码行尾增加正文,仅办法内变量申明或花括号后的正文应用行尾正文。
  12. 文件正文:

    // <copyright file="*.cs" company="Hisense">
    // Copyright (c) Hisense. All rights reserved.
    // </copyright>
    // <author>xxx</author>
    // <date>yyyy-mm-dd</date>
    // <summary>...</summary>
    // <modify>(可选)
    // 批改人:// 批改工夫:// 形容:// </modify>

异样解决

  1. 通过预查看的形式躲避 RuntimeException 异样,不应该通过 catch 来解决,如空指针异样,越界异样等。
  2. 异样不要用来做流程管制,条件管制。
  3. 对于 catch 尽可能辨别异样类型,再做对应的异样解决。
  4. 必须解决异样,否则将其抛给调用者。最外层的业务使用者,必须解决异样,将其转化为用户能够了解的内容。
  5. finally 块必须对资源对象、流对象进行敞开,有异样也要做 try-catch。
  6. 不要在 finally 中做 return,否则会丢掉 try 中的返回点。
  7. 办法的返回值能够为 null,但必须加正文阐明什么状况下返回 null。
  8. 应尽全力防止 NPE(空指针异样)。
  9. 防止产生反复的代码,否则前期批改时须要批改多个中央,容易脱漏。

正文完
 0