因此,使用泛型的代理,也可以使用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(); } }