摘要:
建议97:优先考虑将基类型或接口作为参数传递 除了公开及类型或接口外,方法的参数也应该考虑基类型或接口。 以Enumerable类型为例,它的成员方法中只要涉及需要操作集合对象的地方,都要使用IEnumerable泛型接口,比如: 该方法用于获取集合指定数量的一个子集。正是因为存在这个扩展方法。我们 阅读全文
摘要:
建议96:成员应优先考虑公开基类型或接口 类型成员如果优先考虑公开及类型或接口,那么会让类型支持更多的应用场合。 FCL中最典型的例子是集合的功能操作。集合根据功能划分有多种类型,比如List<T>、Dictionary<TKey,TValue>、HashSet<T>等。以一个最简单的操作Empty 阅读全文
摘要:
建议95:避免在构造方法中调用虚成员 在构造方法中调用虚方法会带来一些意想不到的错误,虽然这种方法不常见,但还是需要注意这类陷阱。 运行会出现异常NullReferenceException:未将对象引用设置到对象的实例。 在调用者代码中,我们需要创建一个American的实例对象american。 阅读全文
摘要:
建议94:区别对待override和new override和new使类型体系应为继承而呈现出多态性。多态要求子类具有与基类同名的方法,override和new的作用就是: 如果子类中的方法前面带有new关键字,则该法被定义为独立于基类的方法。 如果子类中的方法前面带有override关键字,则子类 阅读全文
摘要:
建议93:构造方法应初始化主要属性和字段 类型的属性应该在构造方法调用完毕前完成初始化工作。如果字段没有在初始化器中设置初始值,那么它就应该在构造方法中初始化。 类型一旦被实例化,那么它就应该被视为具有完整的行为和属性。 在构造方法中,必须首先为CEO赋值。因为只要存在公司实体,那么它首先就会有一个 阅读全文
摘要:
建议92:谨慎将数组或集合作为属性 数组或集合作为属性会引起这样一个问题:如果属性是只读的,我们通常会认为它是不可用改变的,但如果将只读属性应用于数座或集合,而元素的内容和数量却仍旧可以随意改变。如下所示: 在上面的代码中,我们可以随意对Employees进行集合操作,它不改变的只是自身的引用而已。 阅读全文
摘要:
建议91:可见字段应该重构为属性 字段和属性的本质区别就是属性是方法。 查看下面这个Person类型: 经过编译器编译后,针对属性Name实际会生成一个private字段和两个public方法: 可见,属性实际上是编译器给我们的语法糖。 属性比字段具有以下的优势: 1)可以为属性添加代码。正是因为属 阅读全文