如何使用泛型方法从基类实例访问派生类属性
本文关键字:访问 派生 属性 实例 基类 何使用 泛型方法 | 更新日期: 2023-09-27 17:55:13
我正在尝试通过基类引用变量访问派生类的所有属性。
类
public class vehicle
{
public int ID { get; set; }
}
public class Car : vehicle
{
public string type { get; set; }
public string Name { get; set; }
}
这是主类中的主要内容
public static void saveCar<T>(T vehicle) where T : vehicle
{
//TODO : here I need to access all the propertie values but I dunno how access only derived class values
}
我正在尝试这样做
static void Main(string[] args)
{
Car cr = new Car
{
ID = 1,
type = "car",
Name = "Maruthi"
};
saveCar<Car>(cr);
}
你不能真正要求T并知道你的真实属性。
我认为您应该将设计更改为如下所示:
public abstract class Vehicle
{
public int Id { get; set; }
public virtual void SaveCar()
{
// save Id
}
}
public class Car : Vehicle
{
public string Type { get; set; }
public string Name { get; set; }
public override void SaveCar()
{
base.SaveCar();
// Save type & name
}
}
为什么将 saveCar 作为通用方法?如果 saveCar 方法是车辆上的虚拟方法,则可以重写每个派生类型中并具有所需的扩展保存功能。但是,如果需要外部方法来处理诸如保存之类的操作,并将 Vehicle 及其派生类作为简单的数据表示形式,则需要检查对象并采取相应的操作。有些像:
public static void saveCar(Vehicle vehicle)
{
if (vehicle != null)
{
Console.WriteLine(vehicle.ID);
if (vehicle is Car)
{
var car = vehicle as Car;
Console.WriteLine(car.Name);
}
}
}