【发布时间】:2018-09-23 17:18:36
【问题描述】:
我有一个持久对象,为了这个问题,我将使用汽车 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 类的所有属性。
此时我陷入了两难境地。覆盖会起作用,但它是额外的工作。有没有更优雅的解决方案。基本上我想通过超类传递给期望基类的函数。用 c# 可以吗?
我的最终代码结果是这样的:
Car myCar = new Car();
SetCarProperties(myCar); // ALL GOOD
SuperCar mySuperCar = new SuperCar();
SetCarProperties(mySuperCar); // at the moment this function is expecting type Car...
【问题讨论】:
-
我认为在
Car类中拥有这个SetCarProperties方法并在子类SuperCar中覆盖它会更合适。 -
如果不是,我认为覆盖将是最干净的解决方案。