定义API的需求
为添加到项目中的每个方法或者函数定义需求和结果。
对于需求,包括输入和输出范围,exceptions 抛出异常,条件限制,以及返回值的类型(尤其如果值是类的实例时)。
定义要求并确保满足代码中的需求可以帮助你编写出健壮的安全的代码。
边写边测
每当你设计和编写一个方法或函数时,就应该编写一个或多个测试用例来确保API的需求得到满足。
(为现有代码编写测试要比为你...
分类:
其他好文 时间:
2015-08-13 18:13:15
阅读次数:
118
做iOS开发有3年之久了,各种项目,大小项目,独立抑或是合作,等等都有涉及,我比较懒,没有写很多高质量的文章。简单总结下iOS开发涉及的知识和各种工具,帮助文档。iOS开发终极索引地址:https://github.com/Aufree/trip-to-iOShttp://dev.swiftguid...
分类:
移动开发 时间:
2015-08-13 17:27:17
阅读次数:
156
建议15: 使用dynamic来简化反射实现dynamic是Framework 4.0的新特性。dynamic的出现让C#具有了弱语言类型的特性。编译器在编译的时候不再对类型进行检查,编译器默认dynamic对象支持开发者想要的任何特性。比如,即使你对GetDynamicObject方法返回的对象一...
建议12: 重写Equals时也要重写GetHashCode除非考虑到自定义类型会被用作基于散列的集合的键值;否则,不建议重写Equals方法,因为这会带来一系列的问题。如果编译上一个建议中的Person这个类型,编译器会提示这样一个信息:“重写 Object.Equals(object o)但不重...
建议13: 为类型输出格式化字符串有两种方法可以为类型提供格式化的字符串输出。一种是意识到类型会产生格式化字符串输出,于是让类型继承接口IFormattable。这对类型来 说,是一种主动实现的方式,要求开发者可以预见类型在格式化方面的要求。更多的时候,类型的使用者需为类型自定义格式化器,这就是第二...
建议14: 正确实现浅拷贝和深拷贝为对象创建副本的技术称为拷贝(也叫克隆)。我们将拷贝分为浅拷贝和深拷贝。浅拷贝 将对象中的所有字段复制到新的对象(副本)中。其中,值类型字段的值被复制到副本中后,在副本中的修改不会影响到源对象对应的值。而引用类型的字段被复制到副本中的是引用类型的引用,而不是引用的对...
建议11: 区别对待==和Equals在开始本建议之前,首先要明确概念“相等性”。CLR中将“相等性”分为两类:“值相等性”和“引用相等性”。如果用来比较的两个变量所包含的数值相等,那么将其定义为“值相等性”;如果比较的两个变量引用的是内存中的同一个对象,那么将其定义为“引用相等性”。无论是操作符“...
建议10: 创建对象时需要考虑是否实现比较器有对象的地方就会存在比较,在.NET的世界中也一样。举个最简单的例子,在UI中,有一个10个人的Salary列表。根据排序的需要,列表要支持针对基本工资来罗列Salary。这个时候,接口IComparable就会起作用,代码如下所示: class S...
建议8: 避免给枚举类型的元素提供显式的值一般情况下,没有必要给枚举类型的元素提供显式的值。创建枚举的理由之一,就是为了代替使用实际的数值。不正确地为枚举类型的元素设定显式的值,会带来意想不到的错误。如果为建议7中的枚举类型Week增加一个元素,代码如下所示: enum Week {...
建议7: 将0值作为枚举的默认值允许使用的枚举类型有byte、sbyte、short、ushort、int、uint、long和ulong。应该始终将0值作为枚举类型的默认值。不过,这样做不是因为允许使用的枚举类型在声明时的默认值是0值,而是有工程上的意义。试想,一个代表星期的枚举类Week,我们会...