我有一个持久性对象,为了这个问题,我将汽车 CAR 类。
public class Car
{
public string model {get;set}
public int year {get;set}
}
显然大大简化了。
现在,随着代码的开发,我自然而然地创建了一个接受 CAR 作为参数的函数。例如:
public void PaintCar (Car theCar)
{
//Does some work
}
到目前为止一切顺利,但后来我遇到了一个场景,我需要另一个类,它与 CAR 非常相似,但是 car 缺少一些字段。没问题,我认为 OOP 可以解决问题,我只会从 Car 继承,最后得到:
public class SuperCar : Car
{
public string newProp {get;set}
// and some more properties
}
再一次,一切看起来都很好,直到我遇到了一个非常有用的效用函数,我用它来填充 Cars 的原始属性。
Public void SetCarProperties(Car theCar)
{
//sets the properties for car here
}
我想嗯,我希望我可以使用相同的函数来设置我的 superCar 类的属性,而无需覆盖。我也不想更改基本汽车定义以包含 superCar 类的所有属性。
在这一点上,我陷入了困境。覆盖会起作用,但它是额外的工作。有没有更优雅的解决方案。基本上我想通过父类(super class)传递给一个需要基类的函数。这可以用 c# 吗?
我的最终代码结果将类似于:
Car myCar = new Car();
SetCarProperties(myCar); // ALL GOOD
SuperCar mySuperCar = new SuperCar();
SetCarProperties(mySuperCar); // at the moment this function is expecting type Car...
最佳答案
一个更优雅的解决方案是将函数 SetCarProperties
放在 Car
类上并在 SuperCar
中覆盖它以使用 base
来填充 Car
的属性,并使用一些额外的代码来填充 SuperCar
属性。
编辑:也称为多态性。