1.注释规范
类型、属性、委托、方法、方法参数,根据需要添加注释。
如果类型、属性、委托、方法、方法参数的名称已经是自解释了,不需要加注释;否则需要添加注释。
当添加注释时,添加方式如下所示:
namespace CodingStandards
{
/// <summary>
/// 产品售光时调用的委托
/// </summary>
public delegate void SaleOutEventHandler();
/// <summary>
/// 产品类,描述产品的基本信息
/// </summary>
public class Product
{
/// <summary>
/// 产品名称
/// </summary>
public string Name { get; set; }
/// <summary>
/// 定义产品被售光时的处理逻辑
/// </summary>
public event SaleOutEventHandler OnSaleOut;
/// <summary>
/// 根据产品Id查找产品
/// </summary>
/// <param name="id">产品Id</param>
/// <returns>符合此Id的产品实例,当不存在该产品时,返回null</returns>
public Product GetProduct(int id)
{
//根据订单状态不同,处理不同的逻辑
if (flag == 0) //当订单状态为客户提交时,….
{
statement;
}
else if (flag == 1) //当状态为已确认时,…
{
}
//根据订单状态不同,处理不同的逻辑
switch (flag)
{
case "N": //客户提交状态
newFlag = 1;
break;
case "I": //传真发送状态
newFlag = 2;
break;
}
return null;
}
/// <summary>
/// 产品类型
/// </summary>
public enum ProductType
{
出境 = 1,
国内游 = 2
}
}
}
2.命名规范
2.1基本命名规范
- 在命名时需要使用有意义的名称
- 优先使用英文,如果英文没有合适的单词,可以使用拼音,如城市名称等
- 禁止使用中文命名,唯一例外,枚举类型中的枚举项推荐使用中文
- 命名不能使用缩写,如必须写成person,不能写成per
2.2 使用Pascal风格(单词首字母大写)命名
- 命名空间
namespace CodingStandards{}
- 类型
public class Product{}
- 枚举类型、枚举值
public enum ProductType
{
出境 = 1,
国内游 = 2
}
- 方法名
public Product GetProduct(int id){}
- 常量
const int Value = 10;
2.3使用Camel风格(首字母小写,其后每个单词的首字母大写)命名
- 变量
int name;
int personId;
- 方法参数
public void Method(int personId){}
- 类型内部的私有和受保护字段,使用Camel风格命名,但加“_”前缀
public class Person
{
private string _name;
}
2.4其他命名规则
- 接口以I(大写的i)为前缀命名
public interface ISpeak {}
- 返回bool类型的方法、属性的命名
如果方法返回的类型为bool类型,则其前缀为Is、Can、Has或者Try,例如:
public class Product
{
public bool IsSaleOut
{
get { return true; }
}
public bool TrySale(int id)
{
return true;
}
public bool CanSale(int id)
{
return true;
}
}
- 委托以EventHandler作为后缀命名
public delegate void WorkEventHandler ();
- 事件以其对应的委托类型,去掉EventHandler后缀,加上On前缀
public event WorkEventHandler OnWork;
- 抽象类以Abstract为前缀或者以Base为后缀命名
public abstract class AbstractPerson {}
- 异常类型以Exception为后缀
public class LoginException {}
- 类型名称和源文件名称必须一致
当class命名为Product时,其源文件命名只能是Product.cs
3.编码规范
- 1.一个方法只做一件事,当你无法为你的方法起一个准确的名称时,很可能你的方法不止做了一
- 2.件事,特别是你想在方法名中加入:And,Or,If等词时,优先使用已有的方法、组件
- 3.不能写“魔数”,不能硬编码,如果可以,写入数据字典>配置文件>定义枚举>定义常量
- 4.不应出现复杂的长条件,应该将长条件封装成方法
- 5.尽可能避免嵌套判断,而且结果应尽早返回
- 6.不同类型的操作符混合使用,用“()”给出优先级,应避免过于复杂的运算,如果可以,分步计算
避免方法过多参数(超过3个),过多的参数,会导致方法不稳定,应封装后使用实体 - 7.写具有表达力的代码
- 8.如果使用的try/catch结构,一定要处理异常,而不是空的异常块
- 9.读取DataTable时,使用列名而不是索引
- 10.对象、集合使用前要做好非空和集合大小判断
- 11.核心功能不能和核心功能使用同一事务,并做好容错处理(try/catch)
- 12.对外系统的安全性必须要考虑
- 13.switch语句必须包含default语句
- 14.方法重载,必须放在一起连续出现
4.布局规范
4.1用Tab作为缩进,并设置缩进大小为4
Visual Studio 2017中设置方法:菜单工具-选项-文本编辑器-C#-制表符,把制表符大小和缩进大小设置成4,点确定
4.2左右花括号必须独占一行,括号内容为空时可在一行
Visual Studio 2017 中设置方法:菜单工具-选项-文本编辑器-C#-代码样式-格式设置-新行
public void Method(int id)
{
int i = 1;
int j = 2;
}
public void Method(int id) {}
4.3类型成员的排列顺序
类型成员的排列顺序自上而下依次为:
- 字段:私有字段、受保护字段
- 属性:私有属性、受保护属性、公有属性
- 事件:私有事件、受保护事件、公有事件
- 构造函数:参数数量最多的构造函数,参数数量中等的构造函数,参数数量最少的构造函数
- 方法:重载方法的排列顺序与构造函数相同,从参数数量最多往下至参数最少
/// <summary>
/// 产品类,描述产品的基本信息
/// </summary>
public class Product
{
private int _field1;
protected int _filed2;
private int _property1 { get; set; }
protected int _property2 { get; set; }
public int _property3 { get; set; }
private SaleOutEventHandler _event1;
protected SaleOutEventHandler _event2;
public SaleOutEventHandler _event3;
public Product(int param1, int param2) { }
public Product(int param1) { }
public Product() { }
public Product GetProduct(int id, string area) { return null; }
public Product GetProduct(int id) { return null; }
public Product GetProduct() { return null; }
}
附表1:常见集合类型后缀命名
凡符合下表所列的集合类型,应添加相应的后缀
说明 | 后缀 | 示例 |
---|---|---|
数组 | Array | int[] productArray |
列表 | List | List<Product> productList |
DataTable/HashTable | Table | HashTable productTable |
字典 | Dictionary | Dictionay<string,string> productDictionary |
EF中的DbSet/DataSet | Set | DbSet<Product> productSet |
附表2:常见后缀命名
凡符合下表所列的局部变量、方法参数、字段、属性,均需添加相应的后缀
说明 | 后缀 | 示例 | 示例说明 |
---|---|---|---|
费用相关 | Cost | ShipCost | 运输费 |
价格相关 | Price | ProductUnitPrice | 产品单价 |
消息相关 | Message | SuccessMessage | 成功消息 |
日期相关 | Date | OrderDate | 下单日期 |
时间相关 | Time | OrderTime | 下单日期 |
计数、数量相关 | Count | LoginCount | 登录次数 |
链接地址相关 | Url | BlogUrl | 博客链接 |
图片相关 | Image | SignImage | 签名图片 |
金额相关 | Amount | PrepaidAmount | 预付款 |
点数、积分相关 | Point | MemberPoint | 会员积分 |
记录、日志相关 | Record | ErrorRecord | 错误记录 |
配置相关 | Config | DataBaseConfig | 数据库配置 |
状态相关 | Status | OrderStatus | 订单状态 |
模式、方式相关 | Mode | OpenMode | 打开方式 |
种类相关 | Category/Type二选一 | UserCategory | 用户种类 |
工厂类相关 | Factory | ConnectionFactory | 连接工厂 |
启用相关 | Enabled | ExportEnabled | 开启导出 |
流相关 | Stream | UploadStream | 上传流 |
读取器相关 | Reader | ExcelReader | Excel读取器 |
写入器相关 | Writer | ExcelWriter | Excel写入器 |
适配器相关 | Adapter | IntroOPAdapter | IntroOP适配器 |
提供器相关 | Provider | MemebershipProvider | 会员信息提供器 |
包装器相关 | Wrapper | ProductWrapper | Product包装器 |
连接相关 | Connection | ExcelConnection | Excel连接 |
网友评论