代码规范 - Yefancy/Network-Conference GitHub Wiki
- Camel(驼峰式): 大小写形式-除了第一个单词,所有单词第一个字母大写,其他字母小写。
- Pascal(帕斯卡): 大小写形式-所有单词第一个字母大写,其他字母小写。
-
代码编写完成格式化
==VS快捷键:全选(Ctrl+A)+格式化(Ctrl+K)+(Ctrl+F)==
-
类型(类、结构、委托、接口)、字段、属性、方法、事件的命名
优先考虑使用英文(尽量使用英文),如果实在没有合适的英文进行描述,可以使用拼音,使用中文是不符合要求的。
- 不使用缩写
所有类型、字段、属性、方法、事件尽量不使用缩写,包括大家熟知的缩写,例如msg。
- 不使用单个字母的变量地方
不使用单个字母的变量, 像 i、m、n,对于索引使用index等来替换,用于循环迭代的变量除外。
for (int t = 0; i < 100; i++)
-
**用==Tab==作为缩进(4空格) **
-
基本间隔
运算式间隔、参数间隔1空格
int Count = Count + 1; for (int t = 0; i < 100; i++){} public int Add(int a, int b) {}
-
注释
类型、属性、事件、方法、方法参数、返回值,根据需要添加注释。如果类型、属性、事件、方法、方法参数的名称已经是自解释了,不需要加注释,否则需要添加注释。
==可以用ide自动生成注释段==
选中变量名、方法名右键生成注释段
/// <summary> /// 地铁线路类 /// 继承SubaWay类 /// 实现IColor接口 /// </summary> public class SubwayLine:Subway,IColor { /// <summary> /// 线路编号 /// </summary> public int numOfLines; /// <summary> /// 从线路中删除某点 断点两边构成新线路 /// </summary> /// <param name="station">被删站点</param> public void DeletStationFromLine(int station) {} /// <summary> /// 计算通路总路程 /// </summary> /// <param name="G">图</param> /// <param name="way">通路</param> /// <returns>路程 错误通路返回-1</returns> public double DistanceOfWay(Graph g, List<int> way) {} }
-
类型名称和源文件名称一致
当类型命名为Product时,其源文件命名只能是Product.cs。
-
所有命名空间、类型(变量)名称使用==Pascal==风格
namespace SubwayMap { public delegate void ReviseMapEventHandler(); public int Color; public List<List<int>> ShortestWay(Graph g, List<List<int>> ins) {} private enum Direct {} }
-
本地变量、方法参数名使用==Camel==风格(不使用下划线)
public class Subway { public bool IsValidId(int insId) { bool result; } }
-
一个方法只完成一个任务。不要把多个任务组合到一个方法中,即使那些任务非常小
-
调用类型成员内部其他成员,需加==this==,调用父类成员需加==base==
public class SubwayLine:Subway,IColor { public int Color; public int GetColor() { return this.Color; } public void SetCount(int count) { base.Count = count; } }
-
不要“捕捉了异常却什么也不做“。如果隐藏了一个异常,你将永远不知道异常到底发生了没有
-
私有字段和受保护字段,使用Camel风格命名,但加“_”前缀
private int _customId; protected int _color;
-
委托和事件的命名
委托以EventHandler作为后缀命名,例如 SalesOutEventHandler。
事件以其对应的委托类型,去掉EventHandler后缀,并加上On前缀构成。
public delegate void ReviseMapEventHandler(); public class K { public ReviseMapEventHandler OnReviseMap; }
-
返回bool类型的方法、属性的命名
如果方法返回的类型是bool类型,则其前缀为Is
如果某个属性的类型为bool类型,则其前缀为Can。
public class K { private bool _canSaved; public bool IsSaved() {} }
-
常见集合后缀类型命名
凡符合下表所列的集合类型,应添加相应的后缀。
说明 后缀 示例 数组 Array int[] Temp 队列 List List Temp 字典 Dictionary Dictionary<string, int> Temp -
类型成员的排列顺序
类型成员的排列顺序自上而下依次为:
字段:私有字段、受保护字段
属性:私有属性、受保护属性、公有属性
事件:私有事件、受保护事件、公有事件
构造函数
方法:私有方法、受保护方法、公有方法
区域之间空一行
对于内容服务有划分的方法用==region==隔开
public class K { private int _count; protected int _count2; private int Index; public bool CanSaved; public ReviseMapEventHandler OnReviseMap; public K(int insa, int insb){} public K(){} #region 绘图服务 public void DrawMap(Graph g){} #endregion #region 交互服务 public bool IsSaved(){} #endregion }