如何使用泛型方法从基类实例访问派生类属性

本文关键字:访问 派生 属性 实例 基类 何使用 泛型方法 | 更新日期: 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);
            }
        }
    }