gpt4 book ai didi

c# - 关于继承和OOP c#的问题

转载 作者:太空狗 更新时间:2023-10-30 00:05:55 25 4
gpt4 key购买 nike

我有一个持久对象,为了解决这个问题,我将使用 car 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 属性。

编辑:也称为多态性。

关于c# - 关于继承和OOP c#的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6958126/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com