在有些情况下不将类中的集合对象暴露给用户是合理的,特别是当您为集合提供了另外的添加和删除方法时。基于这个原因,只暴露一个仅仅能遍历但不能修改的集合是明智的,下面让我们来看一段代码:
1: public class Order
2: {
3: private List<OrderLine> _orderLines;
4:
5: public IEnumerable<OrderLine> OrderLines
6: {
7: get { return _orderLines; }
8: }
9:
10: public void AddOrderLine(OrderLine orderLine)
11: {
12: _orderTotal += orderLine.Total;
13: _orderLines.Add(orderLine);
14: }
15:
16: public void RemoveOrderLine(OrderLine orderLine)
17: {
18: orderLine = _orderLines.Find(o => o == orderLine);
19: if (orderLine == null) return;
20:
21: _orderTotal -= orderLine.Total
22: _orderLines.Remove(orderLine);
23: }
24: }
如代码所示,我们为Order类中的集合对象添加了Add和Remove方法,并将集合暴露为一个只读的IEnumerable<OrderLine>类型。这是一个很简单的重构,但却可以保证类的使用者不会误用类中的集合对象。
原文链接:http://www.lostechies.com/blogs/sean_chambers/archive/2009/08/02/refactoring-day-1-encapsulate-collection.aspx