我有一个持久性对象,为了这个问题,我将汽车 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 属性。

编辑:也称为多态性。

10-04 20:20