我试图通过基类引用变量访问派生类的所有属性。
课程
public class vehicle
{
public int ID { get; set; }
}
public class Car : vehicle
{
public string type { get; set; }
public string Name { get; set; }
}
这是Main class中的主要内容
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);
}
答案 0 :(得分:1)
你不能真正要求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
}
}
答案 1 :(得分:0)
为什么将saveCar作为通用方法?如果saveCar方法是Vehicle上的虚方法,则可以覆盖每个派生类型并具有所需的扩展保存功能。 但是,如果您需要外部方法来处理诸如save之类的操作并将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);
}
}
}