代码规范 - Yefancy/Network-Conference GitHub Wiki

代码规范(C#

命名方式申明

  • 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
    }

⚠️ **GitHub.com Fallback** ⚠️