因此,使用泛型的代理,也可以使用object的代理来代替
class SportCar : Car
{
public override string ToString()
{
return "this is child class-->"+base.ToString();
}
}
public delegate Car GetACarDelegate();
class Program
{
public static void Main(string[] args)
{
GetACarDelegate cd = new GetACarDelegate(GetCar);
//这里注意:将代理直接转换为Car,代理的目标为一个对象
//cd()表示象构造函数一样引用
//转换为Car的时候,不需要类型转换
Car a = cd();
Console.WriteLine(a.ToString());
//从.net 2.0以上的版本支持,代理的时候可以代理它的继承树,象真正的继承一样,可以使用类型转换
GetACarDelegate cd2 = new GetACarDelegate(GetSportCar);
SportCar sc = (SportCar)cd2();
Console.WriteLine(sc.ToString());
}
public static Car GetCar()
{
return new Car();
}
public static SportCar GetSportCar()
{
return new SportCar();
}
}