C#泛型编程指导原则(12--14)

来源:互联网 发布:RecyclerView 添加数据 编辑:程序博客网 时间:2024/05/21 21:35

Item 12: Custom Collections Should Extend Collection<T>自定义集合应当扩展自Collection<T>

在一些时候,你很希望引入自己定义的泛型集合。典型来讲,自定义的泛型集合都应该由现有的来Collection<T>扩展。这样就可以继承它的行为,并且可以根据自己特定的需要来补充或者修改其功能。

在这些情况下,你可能尝试使自定义泛型集合扩展自List<T>List<T>毫无争议的是System.Collections.Generic 命名空间中最强大最有活力的容器。然而,为了使其最优,该类阻止客户重写(Overrid)或者改变它的行为。假设,你可以修改List类,使其可以在一个Item被添加或者被移除的时候记录一些额外的数据。但是List<T>不允许客户重写它的添加和移除Item的方法。因此,虽然List<T>可能是你最喜欢的类之一,但是它不能被作为自定义类的基类。相反,Collection<T>可以充当这一角色。虽然他并没有List<T>的所有能力,但是它公开了一系列关键的保护成员,你可以自由的重写。

Item 13: Use the Least Specialized Interface in Your APIs在自己的API中使用最小的限定接口

System.Collections.Generic命名空间中所包含的集合,实现了一系列不同的接口,这些接口为管理集合、与集合交互提供了不同层次的支持。在自己的API中,应该根据需要选择最合适的接口。一条从经验中得来的规则就是,在自己的API中使用最小的限定接口。如,如果希望在集合中依次迭代集合中的Item,仅仅需要实现IEnumerable<T>接口。

Item 14: Enable “for each” Iteration with IEnumerable<T>通过IEnumerable<T>来支持foreach迭代

System.Collections.Generic命名空间包含了 IEnumerable<T> 接口。该接口为迭代集合中的元素提供了一个标准的机制。在框架中,它的角色比其他基于集合的接口更显著。foreach提供了一个简洁的、可读性强的途径来访问集合中的所有元素(Item)。因此,在自己的泛型中最好实现对foreach的支持。

 
原创粉丝点击