继承 - 是否可以“强制”相对于派生类的变量值? [重复]

问题描述 投票:0回答:1

这是我在 StackOverflow 上的第一个问题...我是一名前文学士,正在学习如何成为一名初级开发人员(8 周),所以请温柔点 ;-)

我正在尝试学习继承,但我不确定我是否正确理解了这个概念。

我正在尝试创建一个简单的模型。一辆车辆只能有 1 个“VehicleType”,并且“VehicleType”就是一辆车辆。因此,我创建了一个基类“车辆”和三个派生类“自行车”、“汽车”和“卡车”。

当我创建派生类时,是否可以强制该类的某些变量始终相同,而不是纯粹依赖构造函数?例如。自行车的“numberOfWheels”总是 2,汽车的“numberOfWheels”总是 4。我是否可以强制声明这一点,或者我总是必须在构造函数中声明它们?如果我有多个特定于该类的变量,那么必须单独声明它们并冒着错误的风险似乎是违反直觉的,当我情不自禁地认为动态地执行它会容易得多时......但我可以'找不到任何关于这个的东西-哎呀。这表明我可能误解了?

我希望我的问题有意义,但如果没有,请耐心等待。学习说“开发”语言几乎和编码一样困难!

尚无代码可显示

c# inheritance constructor properties member
1个回答
-1
投票

欢迎来到该网站。我认为这是一个很好的问题,它说明了面向对象编程的一些最强大的功能。

abstract
类和属性可用于完成您正在寻找的内容。给出一个简洁的代码示例:

public enum VehicleType
{
    Car,
    Truck,
    Airplane,
    Spaceship
}

public abstract class Vehicle
{
    public abstract VehicleType Type { get; }
}

public class Car : Vehicle
{
    public override VehicleType Type => VehicleType.Car;

    // Properties and methods specific to Car
}

public class Airplane : Vehicle
{
    public override VehicleType Type => VehicleType.Airplane;

    // Properties and methods specific to Airplane
}

abstract
表示派生类必须通过重写来实现缺少的成员。因此,对于
Vehicle
的每个子类,在本例中,您被迫重写
Type
并返回
VehicleType
值之一,因此不必依赖构造函数(或可能无意中被调用的成员)其他地方改变)。这是我经常使用的常见模式和技术。

© www.soinside.com 2019 - 2024. All rights reserved.