The Elements of C# Style -Naming
1.一般原则
1.1 使用有意义的名称
使用对阅读代码的人始终有意义的名称。例如:
if (a < 65) {y = 65 - a ; } else {y = 0; }
改为
if( age < RetirementAge) {yearToRetirement = RetirementAge - age ; } else { yeaerToRetirement = 0; }
本规则例外情况:当足以从上下文中判断出其目的时,可以用简约的方式命名临时变量,例如在循环内部作计数器或索引的变量:
for ( int i = 0 ; i < numberOfStudents ; ++i) { EnrllStudent(i) ; }
1.2 根据含义而非类型来命名
类型信息一般可以从其语法和使用场景中推断出来。有意义的名称才有用。例如,使用Customer而不用CustomerClass。
本规则例外情况:GUI控件的命名。有时,以名称来区分GUI元素的类型非常有用。例如,区分customerNameLabel(窗体上的标记控件)和customerNameTextbox(窗体上的文本框控件)。
1.3 使用熟悉的名称
使用目标领域术语表中存在的单词。如果客户喜欢用“customer”,则用Customer命名类,而不用Client(客户)。
1.4 不要用大小写来区分名称
编译器能够区分仅以大小写不同的名称,但人可能注意不到其差异。这等同于名字隐藏。例如XMLStream和XmlStream。
1.5 避免使用过长的名称
对象的名称足以描述其目的。如果类、接口、变量或方法的名称过长,则该实体可能企图实现太多功能。
1.6 加上元音-使用完整的单词
切勿通过去除元音来缩短名称。
public class Msg {public Msg AppendSig(string sig){} }最好改成public class Message {public Message AppendSignature(string signature){} }
2. 缩略形式
2.1 除非全称太长,否则不用缩略形式
坚决不用不必要的缩略次迷惑人。
2.2 像普通词一样书写缩略词
如果缩略词是类型或常量名称的首个单词,只大写缩略词的第一个字母。 XMLString -> XmlString LoadXM
条件编译指示符的名称中的缩略词不适用这一规则,因为这类名称只能用大写字母写出。
[conditional(GUI)]
本规则不适用情况:在变量或参数名开始处的缩略词,因为这些名称总以小写字母开头:
Document xmlDocument
3. 预处理器符号
3.1 用大写字母和下划线表示预处理器符号
#define EVAL_VERSION
3.2 给预处理器名称添加唯一前缀
建议使用所在组织名称的缩略形式,可自行选择是否加上产品名称的缩略形式。
4. 类型和常量
4.1 使用Pascal写法给命名空间、类、结构、属性、枚举。常量以及函数命名
每个单词的首字母大写,区分名称中每个独立的单词。第一个字母大写提供了一种使其与参数或变量相区分的 机制。
4.2 使用名称命名复合类型
应该用名词来命名定义对象或其他事物的类、结构或属性。
4.3 用复数形式书写集合名称
List<Shape> shapes=...
4.4 .给抽象基类类型加上“Base”后缀
public abstract class AccountBase ; public class PersonalAccount : AccountBase ; public class BusinessAccount : AccountBase ;
4.5.给实现一种设计模式的类添加模式名称
MessagerFactory
4.6 使用单个大写字母命名泛型参数
public static Lsit<T> Uniquify(List<T>) {... }
5. 枚举
5.1 用单数形式为枚举命名
public enum SortOrder
5.2 用复数形式给位域命名
位域通常用于可以组合形式出现的元素的列表,应使用复数形式:
[Flags] public enum PrintSettings {Draft = 0,Doplex = 1,Color = 2, }
6. 接口
6.1 用大写字母“I”作为接口名称的前缀
6.2 使用名词或形容词给接口命名
接口声明了对象提供的服务,或描述了对象的能力。
使用名词给用于用于声明服务的接口命名:
public interface IMessageListener { public void MessageReceived( Message message) ; }
使用形容词给用于描述能力的接口命名。大多数描述能力的接口使用在动词后面加上-able或-ible后缀创造的形容词来命名:
public interface IReversible { public ICollection Reverse(); }
7. 属性
7.1 依附值或赋值想给属性命名
public Date ExpirationDate {get{return expirationDate_;} }
7.2 避免冗长的属性名称
YES: public ICollection Customers NO:public ICollection CustomerCollection;
7.3 能用体系布尔值特性的名称给布尔型属性命名
如果某个属性返回一个布尔值,给其名称加上“is”、"has"或"are"前缀。
public bool IsGood ; public bool HasCompleted ;
8. 方法
8.1 使用Pascal 写法为方法命名
函数名中第一个单词首字母大写,后面每个单词首字母大写,可区分开名称中的每个单词。
public class DataMainpulator {public void ComputeStatistics(DoubleMatrix m) ; }
8.2 用动词命名方法
public class Account {public void Withdraw(double amount){balance_ -= amount ;}public void Deposit(double amount){Withdraw( - amount);} }
8.3 避免使用冗长的方法名
在Book的类中使用public void Open() ;而不使用 public void OpenBook () ;
9. 变量和参数
9.1 使用骆驼写法给变量和方法参数命名
变量中的第一个单词的首字母小写,后面的每个单词的首字母大写,区分开名称中每个单词。
public class Customer {public string firstName_;public string lastName_;public string ToString(){return lastName_ + ", " + firstName_;}}
9.2 给成员变量名称加上前缀后后缀,使之与其他变量区分开
例如可以加上后缀下划线。
public class Customer {private string homePhone_;private string workPhone_; }
9.3 依所赋值的字段名称给构造函数和属性参数命名
依成员变量名称给方法参数命名,向阅读者指出参数赋值给成员。
public class Customer {private string name_;public Customer(string name){name_ = name; }public string Name{get{return name_;}}}
9.4 用一系列标准名称为“一次性”变量和参数命名
可以使用下列命名:
循环指示符(通常是int) i,j,k
Object o
String s
Exception e或ex
EventArgs ea
Graphics g
10. 特性
10.1 给自定义的特性实现加上“Attribute”后缀
public class MyFavoriteAttribute : Attribute
11. 命名空间
11.1 用机构名称给根命名空间命名,加上项目、产品或小组名来缩小范围
namespace Company.Group.Project { ... }
12. 事件处理
12.1 使用适当的名称清晰区分事件处理部分
事件类的名称应该包括对动作的描述,例如:MessageReceived.
引发事件的类的名称应该是名词,如Messager。
为事件定义数据的类的名称应该类似MessageReceivedEventArgs.
MessageReceivedEventHandler是委托。
13. 异常
13.1 给自定义异常类型添加“Exception”后缀
public BadArgumentException :ApplicationException { ... }
转载于:https://www.cnblogs.com/lufangtao/archive/2012/08/24/2654382.html
The Elements of C# Style -Naming相关推荐
- The elements of programming style,好程序的要素
软件工程经验 本是Fortran语言时代的软件工程经验总结,感觉多数条目也适合使用任何语言开发项目.后面的中文翻译是我理解的. 条目 Write clearly - don't be too clev ...
- Bootstrap 4:您需要知道的一切
深入解决常见的响应式Web设计问题 (A deep dive into solving common responsive web design problem) This article will ...
- web设计经验七13步打造优雅的WEB字体
今天,大多数浏览器已经默认支持Web字体,日趋增多的字体特性被嵌入最新版HTML和CSS标准中,Web字体即将迎来一个趋于复杂的崭新时代.下面是一些基本的关于字体的规则,特别适用于Web字体. 原文地 ...
- 每个设计师应该阅读的8本书
本文提供的8本书中,有的是很多年前的书,新的很少.但这几本书中对设计师来说都很重要,希望设计师们贡献出来一些时间,把它们读完,你们会发现,这是值得的. 1.<设计的法则> 本书简介: &l ...
- 9个offer,12家公司,35场面试,从微软到谷歌,应届计算机毕业生的2012求职之路...
1,简介 毕业答辩搞定,总算可以闲一段时间,把这段求职经历写出来,也作为之前三个半月的求职的回顾. 首先说说我拿到的offer情况: 微软,3面->终面,搞定 百度,3面->终面,口头of ...
- JavaScript编码规范[百度]
JavaScript编码规范 1 前言 2 代码风格 2.1 文件 2.2 结构 2.2.1 缩进 2.2.2 空格 2.2.3 换行 2.2.4 语句 2.3 命名 2.4 注释 2.4.1 单行注 ...
- 身为java程序员你需要知道的网站(包含书籍,面试题,架构...)
推荐几本书<高级java程序员值得拥有的10本书>, 首页 所有文章 资讯 Web 架构 基础技术 书籍 教程 我要投稿 更多频道 » - 导航条 -首页所有文章资讯Web架构基础技术书籍 ...
- Javascript编码规范,好的代码从书写规范开始,增强代码的可读性,可维护性,这是相当重要的!...
1. 前言 JavaScript在百度一直有着广泛的应用,特别是在浏览器端的行为管理.本文档的目标是使JavaScript代码风格保持一致,容易被理解和被维护. 虽然本文档是针对JavaScript设 ...
- 计算机毕业生求职之路
2019独角兽企业重金招聘Python工程师标准>>> 一个应届计算机毕业生的2012求职之路 1.简介 毕业答辩搞定,总算可以闲一段时间,把这段求职经历写出来,也作为之前三个半月的 ...
最新文章
- VMware View 5.0 Ready! 资源汇总(持续更新)
- 【Python】青少年蓝桥杯_每日一题_7.11_画太阳
- 【学习】SpringBoot之自定义拦截器
- C++ using namespace 命名空间的定义与使用
- jvm的client与server工作模式
- webmail lite php,自建webmail网页客户端
- hippocampal subfield module 安装与使用
- DotNET:LINQ对泛型(Generic)操作和泛型方法及属性
- hiberante中get和load方法的区别
- 消息生产与消息存储——kafka源码探究之三
- 【考研数学】张宇1000题,汤家凤1800,李永乐660,应该怎么选择?
- shell脚本俄罗斯方块小游戏
- lbp2900打印机linux驱动下载,lbp2900打印机驱动下载x64 (canon lbp2900驱动canon lbp2900打印机驱动)下载 - 下载吧...
- windows端口配置
- wamp5如何配置多个自定义域名访问本地不同的项目
- dalao的背包九讲
- input输入框无法输入值的解决方案
- c语言数学作业及答案,2004年9月全国计算机等级考试二级C语言笔试试题及答案...
- 南京大学的计算机到底怎么样?
- FFmpeg的HEVC解码器源代码简单分析 解析器(Parser)部分
热门文章
- 库克笑了,说要给股东多分红:换了M1后Mac销售额增长70%,iPhone也增长66%
- 中国最新奥数竞赛成绩出炉:南师大附中女生严彬玮满分夺冠!60人国家集训队名单公布...
- JS题目总结:原型链/new/json/MVC/Promise
- 未来数据中心的选择:宽带多模光纤(WBMMF)
- 저장소system.runtime.remoting.messaging.callcontext
- Java修改文件夹下所有文件名
- android oppo 权限,OPPO Reno可尝鲜Android Q:教程如下
- 使用 Amazon Cloud WAN 构建您的全球网络
- 5G 标准 — R16
- N4 接口是 5G 产业价值的金线