我有两个类和一个像
这样的界面interface IVehicle
{
void Drive();
}
class Benz :IVehicle
{
public void Drive()
{
Console.WriteLine("WOW! driving benz");
}
}
class Ferrari : IVehicle
{
public void Drive()
{
Console.WriteLine("WOW! driving ferrari");
}
}
我有一个使用它的Driver类。
class Driver
{
public void StartDriving(IVehicle vehicle)
{
vehicle.Drive();
}
}
还有一个通用驱动程序。
class GenericDriver
{
public void StartDriving<T>() where T : IVehicle , new()
{
T vehicle = new T();
vehicle.Drive();
}
}
问题
有什么想法吗?
答案 0 :(得分:9)
T
中创建Drive()
的实例,否则可以在没有delegate IVehicle VehicleBuilder();
的通用内容的情况下完成现在我为什么要通用Driver
。考虑:
class Driver<TVehicle>
where TVehicle : class, IVehicle, new()
{
public TVehicle Vehicle { get; set }
public Driver()
{
Vehicle = new TVehicle();
}
}
通过这种方式,我可以使用强类型Driver<>.Vehicle
属性,该属性属于特定类型,而不是更常见的IVehicle
。
答案 1 :(得分:2)
答案 2 :(得分:1)
第二种意味着每次调用时都需要构造一个新对象,而第一种方法允许你在调用之外构造并因此重用该对象,如果经常调用它可以节省很多资源。