首页 > 代码库 > 自己总结的C#编码规范--1.命名约定篇

自己总结的C#编码规范--1.命名约定篇

最近在为公司编写c#编码规范,以前对这方面研究不多,只是觉得代码能够出自己的意思就可以了。

我参考了以下资料

  1. C# Coding Conventions
  2. NET设计规范约定惯用法与模式(第2版)
  3. 编写可读性代码的艺术
  4. 重构—改善既有代码的设计
  5. 高效程序员的45个习惯
  6. 代码整洁之道

发现其实真要写好一个代码规范是一件非常难的事情,这取决于规范制定者的经验,团队成员的水平,业务的具体需求,项目的复杂度,项目的进度,企业的文化氛围等等。

而且每次提笔要写的时候,总是有很多很多的想法想写进去,可是作为一个规范又不可能太长,要精简。

所以自己写了两天目前只写出来了命名约定这一部分,先和大家分享一下,里面对于为什么要选择这个约定也有一定的解释,希望大家可以一起探讨下我选的这些规范是否合理,如果不合理的地方很高兴能和大家一起修改。

后续几天我会陆续的把

二、命名的选择

三、注释的编写

写好,同时也希望大家帮我想想编码规范还有哪些方面需要覆盖。

 

 

命名约定

 

我们在命名标识符时(包括参数,常量,变量),应使用单词的首字母大小写来区分一个标识符中的多个单词,如UserName.

  • PascalCasing

PascalCasing包含一到多个单词,每一个单词第一个字母大写,其余字母均小写。例如:HelloWorld、SetName等。

除了参数、变量、常量外,所有命名空间名称、类、函数、接口、属性、事件、枚举等名称的命名,使用 Pascal 风格。

  • camelCasing

camelCasing包含一到多个单词,第一个单词首字母小写,其余单词首字母大写。例如:name、productId等。

参数与变量的命名使用camelCasing.

  • SCREAMING_CAPS

SCREAMING_CAPS包含一到多个单词,每个单词的所有字母都大写,单词与单词之间用"_"连接,该风格目前在c#中只用于const常量

如:public const string DEFAULT_PAGE = "default.aspx";

  • 私有变量的命名

Private 的私有变量使用下划线"_"+camelCasing的大小写规则,以便快速确认该变量的作用域。

如: private int _userId;

  • 首字母缩写词的大小写

首字母缩写词是由一个短语的首字母组成的,如Xml(ExtensibleMarkuLaguage),IO(Input and Output)。它和单词缩写是有区别的,单词缩写仅仅是把一个单词的长度变短。

  1. 把两个字母的首字母缩写词全部大写,除非它是camelCasing的第一个单词。

    using System.IO;

    public void StartIO(Stream ioStream)

  2. 由三个或以上的字母组成的首字母缩写词,只有第一个字母大写,如Xml,Html.除非首字母是camelCasing标识符的第一个单词。

    using System.Xml;

    public void ProcessXmlNode(XmlNode xmlNode)

  • 复合词的大小写

不要把复合词中的首字母大写。复合词要当成一个单词来处理。

如endpoint, callback,metadata,namespace等都是正确的写法

  • 在带单位的值的变量后加上"_camelCasing单位"

将单位加入标识符命名中,可以使使用者快速准确的知道传人数据的单位,减少错误的发生。

public void CreateCache(int cacheSize)

传入的数据是bytes, KB, MB 还是GB?

改成public void CreateCache(int cacheSize_mb)

一目了然,并且会减少调用者传入错误数据的可能。

其他一些没有单位的函数参数以及带单位的版本。

 

  • 不要使用匈牙利命名法

匈牙利命名法是指用小写形式的数据类型缩写来作为变量名的前缀。如:strName,intCount。

这种命名法在C和C++时代很流行,可以帮助程序员记住自己的类型。

但在C#中需要禁用,除非你有足够的理由,因为:

  1. C#都是强类型的,现在的IDE(如Visual Studio)可以自动的检测出当前变量的类型以及类型错误

  2. 开发初期经常需要修改变量的类型,使用匈牙利命名法维护很困难。
  • 使用英语语序命名标识符

人在阅读代码时,能更快的理解符合其阅读习惯的命名。

如VerticalAlignment比AlignmentVertical能让人更快的知道该变量的含意。