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

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的支持。

 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值