- 调用简单明了。
- 可预知的,类型安全的。
- 可以提高代码的可阅度,使代码逻辑更清晰。)
以前我们使用集合,一般实现IList集合,再内建ArrayList实现,下面这个是购物车里面的一段:
public class Cart : IEnumerable {
private ArrayList _items = new ArrayList();
private decimal _total=0;
public IEnumerator GetEnumerator() {
return _items.GetEnumerator();
}
public decimal Total {
get { return _total; }
set { _total = value; }
}
public int Count {
get { return _items.Count; }
}
public CartItemInfo this[int index] {
get { return (CartItemInfo)_items[index]; }
}
public void Add(string ItemId) {
foreach (CartItemInfo cartItem in _items) {
if (ItemId == cartItem.ItemId) {
cartItem.Quantity++;
cartItem.InStock = (GetInStock(ItemId) - cartItem.Quantity) >= 0 ? true : false;
_total = _total+(cartItem.Price*cartItem.Quantity);
return;
}
}
Item item = new Item();
ItemInfo data = item.GetItem(ItemId);
CartItemInfo newItem = new CartItemInfo(ItemId,data.Name, (data.Quantity >= 1), 1, (decimal)data.Price);
_items.Add(newItem);
_total = _total+(data.Price);
}
只贴了一段不完整的代码,现在再看看CollectionBase类的例子
public class textBoxArray:System.Collections.CollectionBase
{
private readonly System.Web.UI.Control HostPage;
//构造函数
public textBoxArray(System.Web.UI.Control Host)
{
HostPage=Host;
}
//addNewTextBox方法添加一个textbox控件
public void addNewTextBox()
{
//this.List.Add(this.Count.ToString());
//建一个新的textbox实例.
TextBox aTextBox=new TextBox();
//将其添加到集合的内部列表
this.List.Add(aTextBox);
//将TextBox添加到由HostForm字段引用的窗体的集合列表中
HostPage.Controls.Add(aTextBox);
//设置初始属性
aTextBox.Style["Left"]=Convert.ToString((Count-1)*130+70);
aTextBox.Style["Top"] = Convert.ToString(160);
aTextBox.Width=120;
aTextBox.BorderStyle=BorderStyle.Outset;
aTextBox.ID=this.Count.ToString();
//初始值
aTextBox.Text="TextBox示例";
aTextBox.ForeColor=System.Drawing.Color.Blue;
}
//创建索引
public TextBox this [int index]
{
get
{
return (TextBox)this.List[index];
}
}
//Remove方法用来删除控件
public void Remove()
{
if(this.Count>0)
{
HostPage.Controls.Remove (this[this.Count -1]);
this.List.RemoveAt(this.Count-1);
}
}
}
清楚了吧,两者之间区别。CollectionBase类作为一个抽象的基类,MS提供一个这样的类确实够照顾我们的。
System.Collections.Generic 好象在.NET FRAMEWORK 2.0是专门定义泛型集合的命名空间。