代码改变世界

C++、Java与C#的命名规范总结

2009-05-21 16:50  Robin1986  阅读(3173)  评论(3编辑  收藏  举报

序言

由于在开发工作中经常用到C++JavaC#作为开发语言,命名规范的问题经常给我造成一些困扰。一方面命名规范没有唯一的标准答案,另一方面,虽说语言的命名规范并没有固定的形式,三种语言的风格毕竟不太一样,也各自有着一些独特的特点。在编写代码的过程中所采用的命名方式经常变动,没有形成固定的风格。因此,根据从网上收集到的一些资料以及自身的一些经验,对C++Java以及C#的命名规范进行了总结,方便以后查询。

命名规范的原则:

l         尽量采用以前采用过的命名规则;

l         尽量在三种语言下采用相同的命名规则,以方便记忆;

l         尽量采用来自官方(如SunMS)的命名规则。

 

1. 匈牙利命名法、Camel命名法与Pascal命名法

匈牙利命名法:在Windows编程中使用非常普遍,由微软的一位匈牙利程序员提出。匈牙利命名法通过在变量名前面加上相应的小写字母的符号标识作为前缀,标识出变量的作用域、类型等。例如,m_lpszStr表示指向一个以0字符结尾的字符串的长指针成员变量。在面向对象的程序设计中匈牙利命名法使用起来非常别扭。

Camel命名法:即骆驼式命名法,原因是采用该命名法的名称看起来就像骆驼的驼峰一样高低起伏。Camel命名法有两种形式:混合使用大小写字母和单词之间加下划线,例如runFastrun_fast都属于Camel命名法。

Pascal命名法:与Camel命名法类似,不过Pascal命名法的首字母为大写字母。

 

2. 命名规范对照表

标识符类型

C++

Java

C#

文件名

与类名相同,定义类是文件名一般成对出现,如FooBar.hFooBar.cpp对应类FooBar

与类名相同。

Java

名字空间、包

C#

包名的前缀是全部小写的ASII字符并且是一个顶级域名,通常是comedugovnetorg。包名的后续部分根据不同机构各自内部的命名规范不尽相同,这类命名规范可能以特定目录名的组成来区分部门、项目、机器或注册名。

示例:

l         com.sun.eng

l         com.apple.quicktime.v2

l         edu.cmu.cs.bovik.cheese

Pascal命名法,且从表示范围大的名字开始。

示例:

l         Oracle.Data.Access;

l         Microsoft.Office.Excel;

枚举值

Pascal命名法,枚举值前面加上枚举类型名,中间以下划线“_”隔开。

示例:

l         enum Color{Color_Red, Color_Green};

Pascal命名法。

示例:

l         enum Color{Red, Green};

Java

类、结构体、类型定义(typedef)、枚举类型

Java

Pascal命名法。

示例:

l         class Raster;

l         class ImageSprite;

Java

接口

与类型命名规范相同。

命名规则与类名相似。

示例:

l         interface RasterDelegate;

l         interface Storing;

Pascal命名法,前面需要加上字符“I”。

示例:

l         interface ITester;

l         interface ILogger;

方法

C#

Camel命名法。

示例:

l         run();

l         runFast();

l         getBackGround();

Pascal命名法。

示例:

l         Run();

l         RunFast();

l         GetBackGround();

方法内的变量及参数

Java

Camel命名法。

示例:

l         int myWidth;

l         int taxTotal;

Java

私有、保护实例字段

Java

Camel命名法,前面需要加一个下划线“_”。

示例:

l         int _employeeId;

l         String _name;

l         Customer _customer;

Java

属性、存取函数

Pascal命名法,读取函数前面加上“Get”,设置函数前面加上“Set”。

示例:

l         GetEmployeeId();

l         SetName();

l         GetCustomer();

Camel命名法,读取函数前面加上“get”,设置函数前面加上“set”。

示例:

l         getEmployeeId();

l         setName();

l         getCustomer();

与方法命名规则相同,应该与字段名称相同。建议采用自动属性。

示例:

 

常量

Java

全部大写,单词间用下划线隔开。

示例:

l         static final int MIN_WIDTH = 4;

l         static final int MAX_WIDTH = 999;

l         static final int GET_THE_CPU = 1;

Java

事件

Pascal命名法。

示例:

l         FormClosing;

l         ValueChanged;

l         ButtonClicked;

异常类型

继承自std::exception,与类型命名规则相同,且以Exception结尾。

继承自java.lang.Exception,与类型命名规则相同,且以Exception结尾。

继承自System.Exception,与类型命名规则相同,且以Exception结尾。

 

参考资料

Google C++编程风格指南:http://www.cppblog.com/Fox/category/6273.html?Show=All

Java语言编码规范:http://huihoo.org/code/java_code_conventions.html

.Net Framework开发人员指南——名称准则:http://msdn.microsoft.com/zh-cn/library/ms229002(VS.80).aspx

C#命名规则、开发习惯和风格:http://www.cnblogs.com/netshuai/archive/2008/06/29/1231934.html