我想得到一些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;
}
有点迷失在那里应该去,但我想避免反射,只是阅读程序集和类类型等。
感谢您的任何建议。