在System.Collections 命名空间下,常用的集合类中,这两个类不属于集合,而是作为自定义集合类的基类。
内置的集合并不能满足所有的数据集合处理,c#为用户自定义集合提供条件。这两个基类如下:
CollectionBase:为强类型集合提供abstract 基类
DictionaryBase:为键/值对的强类型集合提供abstract基类。
集合类有键值对的字典集合和一般集合,这两个基类一个作为非字典集合的基类,一个作为字典集合的基类。
下面以集合CollectionBase作为基类:
class Program
{
static void Main(string[] args)
{
Food food1 = new Food("苹果", 2.0);
Food food2 = new Food("香蕉", 3.0);
Food food3 = new Food("橘子", 4.0);
Food food4 = new Food("西红柿", 5.0);
FoodList foodlist = new FoodList();
foodlist.Add(food1);
foodlist.Add(food2);
foodlist.Add(food3);
foodlist.Add(food4);
for (int i = 0; i < foodlist.Count; i++)
{
Console.WriteLine("名称:{0} 价格:{1}",foodlist.GetItem(i).fname,foodlist.GetItem(i).fprice);
}
Console.WriteLine("删除index=1的元素后:");
foodlist.RemoveAt(1);
for (int i = 0; i < foodlist.Count; i++)
{
Console.WriteLine("名称:{0} 价格:{1}", foodlist.GetItem(i).fname, foodlist.GetItem(i).fprice);
}
}
}
public class Food
{
public string fname;
public double fprice;
public Food()
{
}
public Food(string name, double price)
{
fname = name;
fprice = price;
}
public string fnames
{
get { return fname;}
set { fname = value; }
}
public double fprices
{
get { return fprice; }
set{fprice=value;}
}
}
public class FoodList : CollectionBase
{
public virtual int Add(Food food)//重写父类的添加方法
{
return InnerList.Add(food);
}
public new void RemoveAt(int index)//父类中该方法不允许重写,使用new关键字重写
{
InnerList.RemoveAt(index);
}
public Food GetItem(int index) //根据索引获得类对象
{
return (Food)List[index];
}
}