我希望您能提供一些关于面向对象(OO)的正确建议。
从继承类中访问属性数据的正确方式是什么?
假设有3个类:
public abstract class Vehicle
{
public int Id {get; set; }
public int Wheels {get; set; }
public string Name {get; set; }
public string Color {get; set; }
}
public class Car : Vehicle
{
}
public class Truck : Vehicle
{
public int LoadCapacity {get; set; }
}
我的第一个想法是创建一个存储库,可以提供我所寻找的任何属性。
据我看来,需要以下两种类型的查询:
- 返回具有特定ID的车辆的属性
- 给我所有特定类型的车辆
因此:
public class VehicleRepository
{
ICollection <???> _vehicles;
??? GetVehicle(int Id);
??? GetVehicles(??? vehicleType);
}
这些???是我不确定的内容。
我的想法是为IVehicle添加一个接口,并使用它来实现Vehicle。 结果可能如下所示:
public class VehicleRepository
{
ICollection <IVehicle> _vehicles;
IVehicle GetVehicle(int Id);
ICollection <IVehicle> GetVehicles(IVehicle vehicleType);
}
这显然不起作用。
public IVehicle GetVehicle(int Id)
{
return _vehicles.First(x=>x.Id == Id);
// The above want compile as the interface has no attributes
}
如果我使用Vehicle而不是IVehicle,'First(x=>x.Id == Id)'将正常工作,但如果车辆是卡车,则不会返回“LoadCapacity”。
查看GetVehicles函数时,我考虑的是:
public ICollection <T> GetVehicles <T> ()
{
var vehicles = _vehicles.Where(???);
return vehicles;
}
我有点不确定那里应该填什么,但是我想避免使用反射,只是读取程序集和类类型等。
谢谢你的建议。
[Obsolete]
或[Serializable]
这样的东西。 - Eric Lippert