摘要: 建议132:考虑用类名作为属性名 一般来说,若果属性对应一个类型,应该直接用类型名命名属性名。如下: 没有必要为属性名指定另外的名字,如: 当然,除非我们的类型当中有多个Company类型的属性,这样就必须为我们的属性重构成不同的命名,如: 转自:《编写高质量代码改善C#程序的157个建议》陆敏技 阅读全文
posted @ 2017-12-08 18:01 指间的徘徊 阅读(242) 评论(0) 推荐(0) 编辑
摘要: 建议131:用PascalCasing命名公开元素 开放给调用者的属性、字段和方法都应该采用PascalCasing命名方法,比如: 这样,调用者在调用的代码看起来如下: person.Name 如果我们不注意这样的命名规则,让调用方的代码看起像这样: person.name 我们首先会怀疑name 阅读全文
posted @ 2017-12-08 17:59 指间的徘徊 阅读(219) 评论(0) 推荐(0) 编辑
摘要: 建议130:以复数命名枚举类型,以单数命名枚举元素 枚举类型应该具有负数形式,它表达的是将一组相关元素组合起来的语义。比如: 在这里,Week对于星期几来说,具备复数含义。如果我们将Week修改为Day,那么调用的代码会变成如下形式: Day.Monday 它不会比下面的代码更简洁了: Week.M 阅读全文
posted @ 2017-12-08 17:57 指间的徘徊 阅读(370) 评论(1) 推荐(0) 编辑
摘要: 建议129:泛型类型参数要以T作为前缀 作为一种约定,泛型类型的参数要以T作为前缀。如委托声明: Action<T1,T2> 其中,泛型类型参数名不应该处理成: Action<Arg1,Arg2> 当然,这仅仅是一种习惯,若果使用第二种命名方式,编译器并不会报错,但是作为调用者,也许不能意识到这里是 阅读全文
posted @ 2017-12-08 17:45 指间的徘徊 阅读(259) 评论(0) 推荐(0) 编辑
摘要: 建议128:考虑让派生类的名字以基类名字作为后缀 派生类的名字可以考虑以基类名字作为后缀。这带来的好处是,从类型的名字上我们就知道它包含在哪一个继承体系中。 Exception及其子类就是这样一个典型的例子。所有的异常都应该继承自System.Exception,而所有的异常都应该命名为Custom 阅读全文
posted @ 2017-12-08 17:44 指间的徘徊 阅读(226) 评论(0) 推荐(0) 编辑
摘要: 建议127:用形容词组给接口命名 接口规范的是“Can do”,也就是说,它规范的是类型可以具有哪些行为。所以,接口的命名应该是一个形容词,如: IDisposable表示可以被释放 IEnumerable表示类型含有Items,可以被迭代。 正是因为接口表示的是类型的行为,所以从语义上可以让类型继 阅读全文
posted @ 2017-12-08 17:43 指间的徘徊 阅读(256) 评论(0) 推荐(0) 编辑
摘要: 建议126:用名词和名词组给类型命名 类型对应着现实世界中的实际对象。对象在语言中意味着它是一个名词。所以,类型也应该以名词或名词词组去命名。 类型定义了属性和行为。虽然它包含行为,但不是行为本身。所以,下面的一些命名对于类型来说是好的命名: OrderProcessor ScoreManager 阅读全文
posted @ 2017-12-08 17:11 指间的徘徊 阅读(219) 评论(0) 推荐(0) 编辑
摘要: 建议125:避免用FCL的类型名称命名自己的类型 试想过自己写一个Socket类型吗?如果没有,我们来尝试一下: 把以上代码同某些其他工具类封装到某个dll里,让其他人调用。调用者代码如下: 接着编译、运行程序,我们会发现编译没有报错,程序运行也很好。我相信,看到这段代码的人员,可能都会认为我们是在 阅读全文
posted @ 2017-12-08 17:10 指间的徘徊 阅读(229) 评论(0) 推荐(0) 编辑
摘要: 建议124:考虑在命名空间中使用复数 如果有一组功能相近的类型被分到了同一个命名空间想,可以考虑为命名空间使用复数。 最典型的例子有,在FCL中,我们需要把所有的非泛型集合类集中在一起存放,所以就有了System.Collections命名空间。这样的命名规范,好处是即便没有使用过集合类的人,看到这 阅读全文
posted @ 2017-12-08 16:57 指间的徘徊 阅读(258) 评论(0) 推荐(0) 编辑
摘要: 建议123:程序集不必与命名空间同名 程序集一般会和命名空间同名,但这并不是必须的。事实上,不同名的命名空间和程序集是很常见的。 程序集表示的是一种物理上的分组,而命名空间是逻辑上的分组,两者没有必然联系。 当然,如果项目最终会被编译为dll,则我们更建议程序集和命名空间命名保持一致,这看上去更符合 阅读全文
posted @ 2017-12-08 16:56 指间的徘徊 阅读(206) 评论(0) 推荐(0) 编辑
摘要: 建议122:以<Company>.<Component>为命名空间命名 建议以<Company>.<Component>为程序集命名,比如Microsoft.Windows.Design。这有助于唯一地标识我们的命名空间。 另外一种有效且肯定是唯一的表示命名空间的方式是使用域名。假设我们的域名是ww 阅读全文
posted @ 2017-12-08 16:55 指间的徘徊 阅读(210) 评论(0) 推荐(0) 编辑
摘要: 建议121:为应用程序设定运行权限 在某些情况下,可能存在这样的需求:只有系统管理员才能访问某应用程序的若干功能。这个时候,可以结合.NET中提供的代码访问安全性(Code Access Security)和基于角色(Role-Based Security)的安全性去实现。 如果要通过一下的代码正常 阅读全文
posted @ 2017-12-08 16:53 指间的徘徊 阅读(314) 评论(0) 推荐(0) 编辑
摘要: 建议119:不要使用自己的加密算法 很多人认为自己写的加密算法才是安全的,因为该算法只有“自己知道”。很遗憾,这是大错特错。 首先,我们不是秘密学专家,如果我们随随便便写个算法就称得上是加密算法的话,那么世界上就不会存在“密码学”这个专门的学科了。 其次,应当记住的是:让数据安全的不是加密算法本身, 阅读全文
posted @ 2017-12-08 16:31 指间的徘徊 阅读(329) 评论(0) 推荐(0) 编辑
摘要: 建议118:使用SecureString保存密钥等机密字符串 托管代码中的字符串是一类特殊的对象,它们不可用被改变。每次使用System.String类张的方法之一时,或者使用此类型进行运算时(如赋值、拼接等),都要在内存中创建新的字符串对象,也就是为该新对象分配新的空间。这就带来了两个问题: 针对 阅读全文
posted @ 2017-12-08 16:30 指间的徘徊 阅读(302) 评论(0) 推荐(0) 编辑
摘要: 建议117:使用SSL确保通信中的数据安全 SSL(Secure Socket Layer)最初是由NetScape公司设计的,用于Web安全的网络协议。目前它已经广泛应用到各类网络传输通信中了。SSL利用数字证书技术(非对称加密),保证了通信过程中的唯一性、不可篡改性、不可抵赖性。SSL通道原理图 阅读全文
posted @ 2017-12-08 16:25 指间的徘徊 阅读(273) 评论(0) 推荐(0) 编辑
摘要: 建议116:避免用非对称算法加密文件 MD5值或者说HASH值是一种不可逆的算法。如果需要从密文还原成明文,那么就需要对称和非对称这两类可逆算法了。 对称算法示意图: 在对称算法中,首先需要发送方和接收方协定一个密钥K。K可以是一个密钥对,但必须是加密密钥和解密密钥之间能相互推算出来的。在最简单也是 阅读全文
posted @ 2017-12-08 16:24 指间的徘徊 阅读(323) 评论(0) 推荐(0) 编辑
摘要: 建议115:通过HASH来验证文件是否被篡改 MD5算法作为一种最通用的HASH算法,也被广泛用于文件完整性的验证上。文件通过MD5-HASH算法求值,总能得到一个固定长度的MD5值。虽说MD5是一种压缩算法,以致可能存在多个样本空间会得到相同目标字符串的情况,但是这种概率很小。一个1GB的文件,哪 阅读全文
posted @ 2017-12-08 16:22 指间的徘徊 阅读(435) 评论(0) 推荐(0) 编辑
摘要: 建议114:MD5不再安全 MD5不再安全不是就算法本身而言的。如果从可逆性的角度出发,MD5值不存在被破解的可能性。 MD5被广泛应用于密码验证和消息完整性验证。假设新注册一个用户,当注册用户的密码第一次被存储到数据库时,往往会将其转换为MD5值存储: 输出为: 保存密码原文:liming's k 阅读全文
posted @ 2017-12-08 16:20 指间的徘徊 阅读(305) 评论(0) 推荐(0) 编辑
摘要: 建议113:声明变量前考虑最大值 假设正在开发一个工资系统,其中一个模块负责处理加薪。代码如下: 输出的结果是: 第一次加薪,工资总数:65535第二次加薪,工资总数:0工资被清零了。 如果让一个刚入行的程序员来写工资系统,他可能会给我们设计一个ushort字段来存储月薪。65535元?够多了,谁的 阅读全文
posted @ 2017-12-08 16:16 指间的徘徊 阅读(247) 评论(0) 推荐(0) 编辑
摘要: 建议112:将现实世界中的对象抽象为类,将可复用对象圈起来就是命名空间 在我们身边的世界中,对象是什么?对象就是事物,俗称“东西”。那么,什么东西算得上是一个对象呢?对象有属性、有行为。以动物为例,比如猫(Cat)。Cat可以有Name,这就是属性;Cat有一个恶习ScratchSofa(挠沙发), 阅读全文
posted @ 2017-12-08 15:46 指间的徘徊 阅读(242) 评论(0) 推荐(0) 编辑