有没有办法做到这一点:
class BetList : List<Bet>
{
public uint Sum { get; private set; }
void Add(Bet bet) : base.Add(bet) // <-- I mean this
{
Sum += bet.Amount;
}
}
我想使用基础 List 类来执行 List 操作。我只想实现 Summming。
有没有办法做到这一点:
class BetList : List<Bet>
{
public uint Sum { get; private set; }
void Add(Bet bet) : base.Add(bet) // <-- I mean this
{
Sum += bet.Amount;
}
}
我想使用基础 List 类来执行 List 操作。我只想实现 Summming。
你应该使用组合,而不是推导
class BetList
{
List<Bet> _internalList=new List<Bet>();
//forward all your related operations to _internalList;
}
如果您需要扩展现有的集合类型,您应该使用Collection<T>
专为此目的设计的集合类型。例如:
public class BetList : Collection<Bet>
{
public uint Sum { get; private set; }
protected override void ClearItems()
{
Sum = 0;
base.ClearItems();
}
protected override void InsertItem(int index, Bet item)
{
Sum += item.Amount;
base.InsertItem(index, item);
}
protected override void RemoveItem(int index)
{
Sum -= item.Amount;
base.RemoveItem(index);
}
protected override void SetItem(int index, Bet item)
{
Sum -= this[i].Amount;
Sum += item.Amount;
base.SetItem(index, item);
}
}
可以在这里找到对List<T>
和之间差异的一个很好的解释: List (of T) 和 Collection(of T) 之间的区别是什么?Collection<T>
上面的类将像这样使用:
var list = new BetList();
list.Add( bet ); // this will cause InsertItem to be called
如果您想保留类派生而不是组合,请尝试以下操作:
class BetList : List<Bet>
{
public uint Sum { get; private set; }
new void Add(Bet bet)
{
base.Add(bet);
Sum += bet.Amount;
}
}
当您需要它而不是存储它时,如何即时计算总和?
class BetList : List<Bet>
{
public uint Sum
{
get { return this.Count > 0 ? this.Sum(bet => bet.Amount) : 0; }
}
}