using System.Collections.Generic;
namespace LosTechies.DaysOfRefactoring.EncapsulateCollection.After
{
public class Order
{
private List<OrderLine> _orderLines;
private double _orderTotal;
public IEnumerable<OrderLine> OrderLines
{
get { return _orderLines; }
}
public void AddOrderLine(OrderLine orderLine)
{
_orderTotal += orderLine.Total;
_orderLines.Add(orderLine);
}
public void RemoveOrderLine(OrderLine orderLine)
{
orderLine = _orderLines.Find(o => o == orderLine);
if (orderLine == null)
return;
_orderTotal -= orderLine.Total;
_orderLines.Remove(orderLine);
}
}
public class OrderLine
{
public double Total { get; private set; }
}
}
第7行还能还原成List<OrderLine>,感觉用ReadonlyCollection<OrderLine>好一些。
public ReadonlyCollection<OrderLine> OrderLines
{
get { return new ReadonlyCollection<OrderLine>(_orderLines); }
}
--> 好处: 集合拥有者可以知悉集合的变化,拥有集合的管控权,用于增加 修改 删除 集合项时加入一些处理

浙公网安备 33010602011771号