using System;
using System.Collections.Generic;
using System.Text;
namespace CustomGenericCollection
{
#region 汽车的定义
public class Car
{
public string PetName;
public int Speed;
public Car(string name, int currentSpeed)
{
PetName = name;
Speed = currentSpeed;
}
public Car() { }
}
public class SportsCar : Car
{
public SportsCar(string p, int s)
: base(p, s) { }
// 其他方法
}
public class MiniVan : Car
{
public MiniVan(string p, int s)
: base(p, s) { }
// 其他方法
}
#endregion
#region 自定义泛型集合
public class CarCollection : IEnumerable where T : Car//:下面的泛型集合类的项目必须是Car 或Car的继承类
{
private List arCars = new List();
public T GetCar(int pos)
{
return arCars[pos];
}
public void AddCar(T c)
{
arCars.Add(c);
}
public void ClearCars()
{
arCars.Clear();
}
public int Count
{
get { return arCars.Count; }
}
// IEnumerable扩展自IEnumerable的,因此,我们需要实现的GetEnumerator()方法的两个版本。
System.Collections.Generic.IEnumerator IEnumerable.GetEnumerator()
{
return arCars.GetEnumerator();
}
System.Collections.IEnumerator System.Collections.IEnumerable.GetEnumerator()
{
return arCars.GetEnumerator();
}
public void PrintPetName(int pos)
{
Console.WriteLine(arCars[pos].PetName);
}
}
#endregion
class Program
{
static void Main(string[] args)
{
Console.WriteLine("***** Custom Generic Collection *****\n");
CarCollection myCars = new CarCollection();
myCars.AddCar(new Car("Rusty", 20));
myCars.AddCar(new Car("Zippy", 90));
foreach (Car c in myCars)
{
Console.WriteLine("PetName: {0}, Speed: {1}", c.PetName, c.Speed);
}
Console.WriteLine();
// CarCollection can hold any type deriving from Car.
CarCollection myAutos = new CarCollection();
myAutos.AddCar(new MiniVan("Family Truckster", 55));
myAutos.AddCar(new SportsCar("Crusher", 40));
foreach (Car c in myAutos)
{
Console.WriteLine("Type: {0}, PetName: {1}, Speed: {2}",
c.GetType().Name, c.PetName, c.Speed);
}
Console.ReadLine();
}
}
}