【进阶修炼】——改善C#程序质量(8)
122,以<Company>.<Component>作为命名空间。
如Microsoft.Windows.Design。也可以用域名作为空间,如www.microsoft.com,就可以写成com.microsoft. <Component>,这种命名方法在java中比较常见。但.net中似乎不是很推荐,最好用第一种。好的命名空间可以避免不同程序集间类名的冲突。
123,程序集不必与命名空间同名。
程序集名称表示的是物理分组,而命名空间是逻辑分组,两者没有必然的联系。但考虑习惯,dll文件名称一般与命名空间一致,如System.Data.dll,我们一看就知道它的命名空间是System.Data。而一些exe主程序则不必要这样命名。
124,考虑在命名空间中使用复数名称。
例如System.Collections,我们一看就知道它的下面是一组关于集合的类,而System.AllCollection等都不是很好。
125,避免使用FCL中的类型名称。
如Socket等。避免引起不必要的混淆和bug,这取决于我们对FCL中的类型的熟悉度。
126,用名词或名词组给类型命名。
类型对应着现实世界中的对象,对象就意味着它应该是一个名词。
127,用形容词为接口命名。
接口代表着“Can do”,表示一种能力。如:ICloneable等。
128,考虑让派生类的名字以基类的名字结尾。
从类型的名字上我们就可以判断出他的继承体系。比如常见的EventArgs,Attribute,但是一些以xxxBase结尾的类则不适用。因为Base结尾代表着它是基类。
129,泛型类型的参数应以T作为前缀。
如Func<in T1, in T2, out TResult>,我们看到以T开头的命名就知道是泛型参数,而不会误以为是一个类名。
130,枚举类型的命名应含有复数意义。
它表达的是一组相关元素的组合。如:DTSubStringType。
131, 用PascalCasing命名公开成员。
外部可见的成员,如属性,字段,方法等都应该用PascalCasing命名。
132, 考虑以类型名作为属性名。
比如public Company Company{get;set;};当然有多个相同类型的属性时除外。
133, 用camelCasing命名私有字段和局部变量。
134, 有条件的使用前缀。
如果类足够小,那么完全没有必要使用前缀。但是往往我们创建的类都很大,可以适当的为类的成员变量添加m_,为静态变量添加s_前缀。添加变量类型的前缀是不必要的,如intTotal,对于强类型的语言,前面的int是多余的。另外,为了区分成员变量和局部变量,最好在使用成员变量时添加this.前缀。
135, 考虑使用肯定性的短语命名bool值。
比如以Is,Can,Has等开头。IsChecked,IsEnabled,AllowDrop等都是好的命名。
136, 优先使用后缀表示已有类型的新版本。
比如微软曾经有一个X509Certificate类,现在有了一个新版本的类,作为它的替代类,于是就命名为X509Certificate2,这是做法看起来好像不专业,但他的扩展性很好,将来可能还有X509Certificate3,另外,当我们使用代码提示的时候,也可以同时提示出这两个类,开发者可以选择最新的类。
137, 委托和事件应添加上级后缀。
如:SizeChangeEventHandler,HttpContinueDelegate,AsyncCallBack。事件加EventHandler,委托如果是用于回调的加CallBack。
138, 委托和事件变量要用动词或形容词短语。
上面一条说的是委托类型的命名,这一条是委托变量的命名。如public event SizeChangeEventHandler SizeChanged;Public RoutedEventHander Click;千万不要这要命名:public event SizeChangeEventHandler SizeChangeEventHandler;
139, 事件处理器命名采用组合方式。
如为Button添加Click事件,事件处理器名应为【事件变量所属对象+下划线+事件变量名】,private void Button_Click(object sender,EventArgs e);前面这种命名适用于采用注册的方式即+=的方式添加事件处理器。如要为委托或回调编写处理器,则应采用【委托变量所属对象+On+委托变量名】,如NameOnPropertyChanged,在我个人看来,委托变量所属对象实属多余,直接OnPropertyChanged,或是跟着微软学,对于事件在后面在添加一个Event,OnPropertyChangedEvent。
【进阶修炼】——改善C#程序质量(8)的更多相关文章
- 【进阶修炼】——改善C#程序质量(1)
这是一个大纲形式的概要,以便自己可以花较少的时间反复阅读.在开发中,多加注意这些有用的建议,让自己成为一个更优秀的程序员.内容主要来自<编写高质量代码-改善C#程序的157个建议>(陆敏技 ...
- 【进阶修炼】——改善C#程序质量(10)
158,不要写冗余注释. 注释应该写代码没有表达的东西. 代码能够自我描述就不要加注释. 159,废弃的注释应该尽早删除. 废弃的注释由于年代太久远,已经和现在的代码逻辑不匹配了,这样的注释只会误导人 ...
- 【进阶修炼】——改善C#程序质量(9)
140,使用默认的访问修饰符. 如果不加访问修饰符,成员变量的默认是private的,类默认是internal的.为了明确访问的权限,我倒是建议都加上访问修饰符,这省不了多少代码. 141,不知道该不 ...
- 【进阶修炼】——改善C#程序质量(7)
113,声明变量时考虑最大值. Ushort的最大值是65535,用于不同的用途这个变量可能发生溢出,所以设计时应充分了解每个变量的最大值. 114,MD5不再安全. MD5多用于信息完整性的校验.R ...
- 【进阶修炼】——改善C#程序质量(6)
90,不应为抽象类指定public的构造函数. 抽象类即使指定了public的构造函数,也是不能实例化的,编译通不过.抽象类的构造函数应该设定为protected,它的作用应该是初始化自己的成员,以及 ...
- 【进阶修炼】——改善C#程序质量(5)
71, 区分异步和多线程的应用场景. 计算机的很多硬件,如硬盘,光驱,声卡,网卡都有DMA(Direct Memory Access)功能,它可以不占用cpu的资源,而异步的提出恰恰就是基于这个的.而 ...
- 【进阶修炼】——改善C#程序质量(4)
46, 显示释放资源,需要实现IDisposable接口. 最好按照微软建议的Dispose模式实现.实现了IDisposable接口后,在Using代码块中,垃圾会得到自动清理. 47, 即使提供了 ...
- 【进阶修炼】——改善C#程序质量(3)
32, 总是优先考虑泛型. 泛型代码有很好的重复利用性,和类型安全性. 33, 应尽量避免在泛型类中声明静态成员. 静态成员达不到共享的目的.List<int>和List<Strin ...
- 【进阶修炼】——改善C#程序质量(2)
16, 元素可变的情况下应避免用数组. 数组是定长的集合,可以考虑用ArrayList或List<T>集合.ArrayList元素是object类型,有装箱的开销,性能较低.另外Array ...
随机推荐
- npm的影武者 —— Npx
npx github:https://github.com/zkat/npx 什么是Npx?它和npm是什么关系? 如果你把NPM升级到最新版本npm@5.2.0 ,它就会安装一个新的包npx $ n ...
- es6Promise及小程序Promise用法
本文主要说一下Promise,Prepending(进行时),Resolve(成功了),Reject(失败了),then在小程序中的实际应用 关于promise的介绍什么的就不说了网上一搜一大堆,这里 ...
- Intellij Idea生成serialVersionUID的方法
默认情况下Intellij IDEA是关闭了继承了java.io.Serializable的类生成serialVersionUID的警告.如果需要ide提示生成serialVersionUID,那么需 ...
- 2.2 Apache Axis2 快速学习手册之 AXIOM 构建 Web Service
和上一篇的POJO 部署相比主要是services.xml 中配置的消息接受处理器类不一样和Java 类中写法不一样. 使用AXIOM构建服务 样例源码路径: C:\Apps\axis2\axis2- ...
- Atitit undac网络设备管理法案 (路由器 交换机等) 法案编号USRr101510
Atitit undac网络设备管理法案 (路由器 交换机等) 法案编号USRr101510 1.1. 版本历史1 1.2. 密码设置规范 与原则1 1.3. 如何设置密码 ,设置一个简单又安 ...
- 菜鸟学Java(六)——简单验证码生成(Java版)
验证码大家都知道,它的作用也不用我多说了吧.如果不太清楚请参见百度百科中的解释,一般验证码的生成就是随机产生字符(数字.字母或者汉字等),然后将这些生成的字符绘制成一张图片,再在图片上加上一些干扰元素 ...
- Word中MathType公式与LaTeX公式的转换
1. 对Word文档中用MathType输入的公式,在word中,选中mathtype公式,按住“Alt+\”键,可以将MathType公式转换成Latex格式. 2. 同样,将Latex格式的公式代 ...
- MyBatis 问题列表
问题表现:The content of elements must consist of well-formed character data or markup 解决办法:1.配置的动态SQL语句里 ...
- error LNK2005: _DllMain@12 已经在 MSVCRTD.lib(dllmain.obj) 中定义
备注:我上次遇到这个问题是Win32 DLL项目中无意中include了afxwin.h,这个是MFC的头文件,把这个include删掉就解决了 ================ 转自:http:// ...
- Kafka vs RocketMQ—— Topic数量对单机性能的影响
引言 上一期我们对比了三类消息产品(Kafka.RabbitMQ.RocketMQ)单纯发送小消息的性能,受到了程序猿们的广泛关注,其中大家对这种单纯的发送场景感到并不过瘾,因为没有任何一个网站的业务 ...