一、代码注释

并不是所有的代码均需要注释。

1、类头部注释

/// <summary>
/// 描述类的用途
/// 作者: 张三
/// 日期: 2015/12/1
/// </summary>
public class MyClass{...}

2、方法头部注释

/// <summary>
/// 描述方法的用途
/// </summary>
/// <param name=”param1”>参数的用途</param>...
/// <returns>返回的结果</returns>
public void MyMethod(){……}

3、代码行注释

public void FooMethod(){
var t = ; //局部变量注释,可写在行末
//块注释, 写在代码行的上一行,单独一行或多行
if(t > ){
Console.PrintLine("xxx");
}
}

4、类属性注释

/// <summary>
/// 描述属性含义与用途
/// </summary>
private string helloStr;

二、命名规则

1、基本约定

  • 要使用可以准确说明变量/字段/类的完整的英文描述符,如vehicleNumber。
  • 要尽量采用项目所涉及领域的术语。
  • 要采用大小写混合,提高名字的可读性。
    • 驼峰表示法:camelCasing
    • Pascal表示法:PasalCasing
  • 避免使用缩写,如果一定要使用,就谨慎使用。
  • 对常见缩略词,两个字母的缩写要采用统一大小写的方式(示例:ioStream, getIOStream);多字母缩写采用首字母大写,其他字母小写的方式(示例:getHtmlTag)
  • 避免使用长名字(最好不超过 15 个字母)。
  • 避免使用相似或者仅在大小写上有区别的名字。
标识符 大小写 示例 说明
 命名空间  Pascal  namespace Com.Techstar.ProductionCenter

程序集、DLL和命名空间(name space)命名,一般情况下建议命名空间和目录结构相同。命名方式:

命名空间(name space): 公司名+产品名+模块名,如:Srx.WeChatOA.Login, 表示三人行公司的微信OA项目的登录模块
DLL: 公司名+(产品名)模块名,如:Srx.Common.dll, 表示三人行的公共模块

 类  Pascal  public class DevsList
  • 类的名字要用名词;
  • 避免使用单词的缩写,除非它的缩写已经广为人知,如HTTP。
  • 接口的名字要以字母I开头。保证对接口的标准实现名字只相差一个“I”前缀,例如对IComponent接口的标准实现为Component;
  • 泛型类型参数的命名:命名要为T或者以T开头的描述性名字,例如:
public class List<T>
public class MyClass<Tsession>
  • 对同一项目的不同命名空间中的类,命名避免重复。避免引用时的冲突和混淆;
 接口  Pascal  public interface ITableModel
 方法  Pascal  public void UpdateData()
  • 第一个单词一般是动词;
  • 如果方法返回一个成员变量的值,方法名一般为Get+成员变量名,如若返回的值 是bool变量,一般以Is作为前缀。另外,如果必要,考虑用
  • 属性来替代方法;
  • 如果方法修改一个成员变量的值,方法名一般为:Set + 成员变量名。同上,考虑用属性来替代方法。
 属性  Pascal  Public int Length{…}  
 事件  Pascal public event EventHandler Changed;   
 枚举值   Pascal  FileMode{Append}  
 参数  Camel  public void UpdateData(string fieldName)  
 私有字段  Camel  private string fieldName; 按照使用范围来分,我们代码中的变量的基本上有以下几种类型,类的公有变量;类的私有变量(受保护同公有);方法的参数变量;方法内部使
用的局部变量。

  • 方法内部的局部变量采用camalString,例如workerName。
  • 尽量要使用短而且具有意义的单词;
  • 单字符的变量名一般只用于生命期非常短暂的变量:i,j,k,m,n一般用于integer;c,d,e 一般用于characters;s用于string
  • 如果变量是集合,则变量名要用复数。例如表格的行数,命名应为:RowsCount;
  • 命名组件要采用匈牙利命名法,所有前缀均应遵循同一个组件名称缩写列表, 如
Button btnSubmit;//提交按钮
 非私有字段  Pascal  public string FieldName;
 局部变量  Camel  string fieldName;

三、其他规范

1. 变量声明, 请不要把多个变量声明写在一行中,即一行只声明一个变量。
例如:

String strTest1, strTest2;

应写成:

String strTest1;
String strTest2;

2. 避免方法中有超过5个参数的情况,一般以2,3个为宜,最多8个。如果超过了,则应使用struct来传递多个参数。
避免写超大类, 类的代码行尽量控制在千行以内, 300到500行为最佳. 绝对不允许出现5000行以上的超大类.

四、错误处理

1. 不要“捕捉了异常却什么也不做“。如果隐藏了一个异常,你将永远不知道异常到底发生了没有。
2. 发生异常时,给出友好的消息给用户,但要精确记录错误的所有可能细节,包括发生的时间,和相关方法,类名等。
3. 只捕捉特定的异常,而不是一般的异常。

五、建议

1. 一个方法只完成一个任务。不要把多个任务组合到一个方法中,即使那些任务非常小。
2. 使用C#的特有类型,而不是System命名空间中定义的别名类型。
3. 别在程序中使用固定数值,用常量代替。
4. 避免使用很多成员变量。声明局部变量,并传递给方法。不要在方法间共享成员变量。如果在几个方法间共享一个成员变量,那就很难知道是哪个方法
在什么时候修改了它的值。
5. 不在代码中使用具体的路径和驱动器名。 使用相对路径,并使路径可编程。
6. 应用程序启动时作些“自检”并确保所需文件和附件在指定的位置。必要时检查数据库连接。出现任何问题给用户一个友好的提示。
7. 如果需要的配置文件找不到,应用程序需能自己创建使用默认值的一份。
8. 如果在配置文件中发现错误值,应用程序要抛出错误,给出提示消息告诉用户正确值。
9. DataColumn取其列时要用字段名,不要用索引号。例:

  正确:DataColumn[“Name”]
  不好:DataColumn[0]
10. 在一个类中,字段定义全部统一放在class的头部、所有方法或属性的前面。
11. 在一个类中,所有的属性全部定义在一个属性块中:

C# 软件编码规范的更多相关文章

  1. Java软件编码规范要求

    1.一个类对应一个文件,文件名与类名保持一致 虽然一个“.java”源文件可以有多个类(不是内部类),但是不提倡那么写.

  2. IT兄弟连 Java语法教程 注释与编码规范

    在程序代码中适当地添加注释可以提高程序的可读性和可维护性.好的编码规范可以使程序更易阅读和理解.下面将介绍Java中的集中代码注释以及应该注意的编码规范. 代码注释 通过在程序代码中添加注释可提高程序 ...

  3. Tutorial 3_软件工作量估计和编码规范

    软件过程与管理实验 实验3:编码规范 本次实验内容是个人软件过程部分,通过本次实验,学生将掌握以下内容: 1.建立自己的编码规范和代码审查表. 2.会用COCOMO II模型对软件工作量进行估计. [ ...

  4. PHP 高级编程(1/5) - 编码规范及文档编写

    PHP 高级程序设计学习笔记20140612 软件开发中的一个重要环节就是文档编写.他可以帮助未来的程序维护人员和使用者理解你在开发时的思路.也便于日后重新查看代码时不至于无从下手.文档还有一个重要的 ...

  5. C#编码规范 转 http://www.cnblogs.com/wulinfeng/archive/2012/08/31/2664720.html

    C#编码规范   1  规范目的 ……………………………………………………… 3 2  适用范围 ……………………………………………………… 3 3  代码注释 ………………………………………………… ...

  6. HTML编码规范

    HTML编码规范 1 前言 HTML作为描述网页结构的超文本标记语言,在百度一直有着广泛的应用.本文档的目标是使HTML代码风格保持一致,容易被理解和被维护. 2 代码风格 2.1 缩进与换行 [强制 ...

  7. c#编码规范

    1  规范目的 --------------------- 3 2  适用范围 --------------------- 3 3  代码注释 --------------------- 3 3.1  ...

  8. [转]JavaScript程序编码规范

    原文:http://javascript.crockford.com/code.html 作者:Douglas Crockford 译文:http://www.yeeyan.com/articles/ ...

  9. html和css的编码规范

    HTML和CSS编码规范内容 一.HTML规范 二.CSS规范 三.注意事项: 四.常用的命名规则 五.CSS样式表文件命名 六.文件命名规则 一.HTML规范: 1.代码规范 页面的第一行添加标准模 ...

随机推荐

  1. Android学习笔记进阶九之Matrix对称变换

    网上很多的倒影特效实际上就是一个对称变换,在改变透明度即可. Matrix对称变换包括很多种,有关于Y轴对称,关于X轴对称,关于y= -x对称等等. 1 关于Y轴对称 // 获取资源文件的引用res ...

  2. Spring中事务的XML方式[声明方式]

    事务管理: 管理事务,管理数据,数据完整性和一致性 事务[业务逻辑] : 由一系列的动作[查询书价格,更新库存,更新余额],组成一个单元[买书业务], 当我们动作当中有一个错了,全错~ ACID 原子 ...

  3. BZOJ4044: [Cerc2014] Virus synthesis(回文树+DP)

    Description Viruses are usually bad for your health. How about fighting them with... other viruses? ...

  4. go 语言学习笔记 0001 --> iota

    go语言中预置了一个预定义常量 iota 这个东西有个很奇怪的特性,会根据 const 关键字改变值 默认的,iota在const出现的时候会初始化为0,而后不断递加1,直到出现第二个const关键字 ...

  5. 005 python 整数类型/字符串类型/列表类型/可变/不可变

    可变/不可变类型 可变类型 ID不变的情况下,值改变,则称之为可变类型,如列表,字典 不可变类型 值改变,ID改变,则称之为不可变类型,如 整数 字符串,元组 整数类型 int 正整数 用途就是记录年 ...

  6. 【Codeforces Round #451 (Div. 2) B】Proper Nutrition

    [链接] 我是链接,点我呀:) [题意] 在这里输入题意 [题解] 可以直接一层循环枚举. 也可以像我这样用一个数组来存y*b有哪些. 当然.感觉这样做写麻烦了.. [代码] /* 1.Shoud i ...

  7. 1、DOM4J简介

    1.DOM4J简介 DOM4J是 dom4j.org 出品的一个开源 XML 解析包.DOM4J应用于 Java 平台,采用了 Java 集合框架并完全支持 DOM,SAX 和 JAXP. DOM4J ...

  8. 洛谷 P1287 盒子与球

    P1287 盒子与球 题目描述 现有r个互不相同的盒子和n个互不相同的球,要将这n个球放入r个盒子中,且不允许有空盒子.问有多少种方法? 例如:有2个不同的盒子(分别编为1号和2号)和3个不同的球(分 ...

  9. [NPM] Test npm packages locally in another project using npm link

    We will import our newly published package into a new project locally to make sure everything is wor ...

  10. 103.tcp通信实现远程控制

    客户端代码 #define _CRT_SECURE_NO_WARNINGS #include<stdio.h> #include<stdlib.h> #include < ...