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相关推荐

  1. The elements of programming style,好程序的要素

    软件工程经验 本是Fortran语言时代的软件工程经验总结,感觉多数条目也适合使用任何语言开发项目.后面的中文翻译是我理解的. 条目 Write clearly - don't be too clev ...

  2. Bootstrap 4:您需要知道的一切

    深入解决常见的响应式Web设计问题 (A deep dive into solving common responsive web design problem) This article will ...

  3. web设计经验七13步打造优雅的WEB字体

    今天,大多数浏览器已经默认支持Web字体,日趋增多的字体特性被嵌入最新版HTML和CSS标准中,Web字体即将迎来一个趋于复杂的崭新时代.下面是一些基本的关于字体的规则,特别适用于Web字体. 原文地 ...

  4. 每个设计师应该阅读的8本书

    本文提供的8本书中,有的是很多年前的书,新的很少.但这几本书中对设计师来说都很重要,希望设计师们贡献出来一些时间,把它们读完,你们会发现,这是值得的. 1.<设计的法则> 本书简介: &l ...

  5. 9个offer,12家公司,35场面试,从微软到谷歌,应届计算机毕业生的2012求职之路...

    1,简介 毕业答辩搞定,总算可以闲一段时间,把这段求职经历写出来,也作为之前三个半月的求职的回顾. 首先说说我拿到的offer情况: 微软,3面->终面,搞定 百度,3面->终面,口头of ...

  6. 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 单行注 ...

  7. 身为java程序员你需要知道的网站(包含书籍,面试题,架构...)

    推荐几本书<高级java程序员值得拥有的10本书>, 首页 所有文章 资讯 Web 架构 基础技术 书籍 教程 我要投稿 更多频道 » - 导航条 -首页所有文章资讯Web架构基础技术书籍 ...

  8. Javascript编码规范,好的代码从书写规范开始,增强代码的可读性,可维护性,这是相当重要的!...

    1. 前言 JavaScript在百度一直有着广泛的应用,特别是在浏览器端的行为管理.本文档的目标是使JavaScript代码风格保持一致,容易被理解和被维护. 虽然本文档是针对JavaScript设 ...

  9. 计算机毕业生求职之路

    2019独角兽企业重金招聘Python工程师标准>>> 一个应届计算机毕业生的2012求职之路 1.简介 毕业答辩搞定,总算可以闲一段时间,把这段求职经历写出来,也作为之前三个半月的 ...

最新文章

  1. VMware View 5.0 Ready! 资源汇总(持续更新)
  2. 【Python】青少年蓝桥杯_每日一题_7.11_画太阳
  3. 【学习】SpringBoot之自定义拦截器
  4. C++ using namespace 命名空间的定义与使用
  5. jvm的client与server工作模式
  6. webmail lite php,自建webmail网页客户端
  7. hippocampal subfield module 安装与使用
  8. DotNET:LINQ对泛型(Generic)操作和泛型方法及属性
  9. hiberante中get和load方法的区别
  10. 消息生产与消息存储——kafka源码探究之三
  11. 【考研数学】张宇1000题,汤家凤1800,李永乐660,应该怎么选择?
  12. shell脚本俄罗斯方块小游戏
  13. lbp2900打印机linux驱动下载,lbp2900打印机驱动下载x64 (canon lbp2900驱动canon lbp2900打印机驱动)下载 - 下载吧...
  14. windows端口配置
  15. wamp5如何配置多个自定义域名访问本地不同的项目
  16. dalao的背包九讲
  17. input输入框无法输入值的解决方案
  18. c语言数学作业及答案,2004年9月全国计算机等级考试二级C语言笔试试题及答案...
  19. 南京大学的计算机到底怎么样?
  20. FFmpeg的HEVC解码器源代码简单分析 解析器(Parser)部分

热门文章

  1. 库克笑了,说要给股东多分红:换了M1后Mac销售额增长70%,iPhone也增长66%
  2. 中国最新奥数竞赛成绩出炉:南师大附中女生严彬玮满分夺冠!60人国家集训队名单公布...
  3. JS题目总结:原型链/new/json/MVC/Promise
  4. 未来数据中心的选择:宽带多模光纤(WBMMF)
  5. 저장소system.runtime.remoting.messaging.callcontext
  6. Java修改文件夹下所有文件名
  7. android oppo 权限,OPPO Reno可尝鲜Android Q:教程如下
  8. 使用 Amazon Cloud WAN 构建您的全球网络
  9. 5G 标准 — R16
  10. N4 接口是 5G 产业价值的金线