最近在为公司编写c#编码规范,以前对这方面研究不多,只是觉得代码能够出自己的意思就可以了。
我参考了以下资料
发现其实真要写好一个代码规范是一件非常难的事情,这取决于规范制定者的经验,团队成员的水平,业务的具体需求,项目的复杂度,项目的进度,企业的文化氛围等等。
而且每次提笔要写的时候,总是有很多很多的想法想写进去,可是作为一个规范又不可能太长,要精简。
所以自己写了两天目前只写出来了命名约定这一部分,先和大家分享一下,里面对于为什么要选择这个约定也有一定的解释,希望大家可以一起探讨下我选的这些规范是否合理,如果不合理的地方很高兴能和大家一起修改。
后续几天我会陆续的把
二、命名的选择
三、注释的编写
写好,同时也希望大家帮我想想编码规范还有哪些方面需要覆盖。
我们在命名标识符时(包括参数,常量,变量),应使用单词的首字母大小写来区分一个标识符中的多个单词,如UserName.
PascalCasing包含一到多个单词,每一个单词第一个字母大写,其余字母均小写。例如:HelloWorld、SetName等。
除了参数、变量、常量外,所有命名空间名称、类、函数、接口、属性、事件、枚举等名称的命名,使用 Pascal 风格。
camelCasing包含一到多个单词,第一个单词首字母小写,其余单词首字母大写。例如:name、productId等。
参数与变量的命名使用camelCasing.
SCREAMING_CAPS包含一到多个单词,每个单词的所有字母都大写,单词与单词之间用"_"连接,该风格目前在c#中只用于const常量。
如:public const string DEFAULT_PAGE = "default.aspx";
Private 的私有变量使用下划线"_"+camelCasing的大小写规则,以便快速确认该变量的作用域。
如: private int _userId;
首字母缩写词是由一个短语的首字母组成的,如Xml(ExtensibleMarkuLaguage),IO(Input and Output)。它和单词缩写是有区别的,单词缩写仅仅是把一个单词的长度变短。
using System.IO;
public void StartIO(Stream ioStream)
using System.Xml;
public void ProcessXmlNode(XmlNode xmlNode)
不要把复合词中的首字母大写。复合词要当成一个单词来处理。
如endpoint, callback,metadata,namespace等都是正确的写法
将单位加入标识符命名中,可以使使用者快速准确的知道传人数据的单位,减少错误的发生。
如public void CreateCache(int cacheSize)
传入的数据是bytes, KB, MB 还是GB?
改成public void CreateCache(int cacheSize_mb)
一目了然,并且会减少调用者传入错误数据的可能。
其他一些没有单位的函数参数以及带单位的版本。
匈牙利命名法是指用小写形式的数据类型缩写来作为变量名的前缀。如:strName,intCount。
这种命名法在C和C++时代很流行,可以帮助程序员记住自己的类型。
但在C#中需要禁用,除非你有足够的理由,因为:
人在阅读代码时,能更快的理解符合其阅读习惯的命名。
如VerticalAlignment比AlignmentVertical能让人更快的知道该变量的含意。