将继承的类构造函数参数传递给基础构造函数参数

Bif*_*iff 0 c# inheritance constructor

将继承的类构造函数的参数传递基类构造函数的"C#方式"是什么?这是否需要覆盖基类中的base_model字符串?

// Base class
class vehicle
{
    private string base_model = String.Empty;

    vehicle(string model)
    {
        this.base_model = model;
    }

}


// Inherited classes
class tesla : vehicle
{
    private readonly string model = "Model S";      // This is unchanging

    tesla(string model) : base ( **pass model to base_model** )
    {
        // Initialize
    }
}

class ferrari : vehicle
{
    private readonly string model = "458 Spider";      // This is unchanging

    ferrari(string model) : base ( **pass model to base_model** )
    {
        // Initialize
    }

}
Run Code Online (Sandbox Code Playgroud)

编辑

@JohnLBevan提出了另一个问题:

这让人想起另一个问题:是否有可能没有tesla类(或ferrari类的那个)的构造函数参数,并自动将model变量(即"Model S")传递给base_model

slu*_*ter 6

更符合OO标准的方法是使用抽象属性.这意味着基类已定义属性,但扩展类必须实现它.这也意味着您无法直接创建实例vehicle,而必须创建一个派生类型.

abstract class vehicle
{

    vehicle() {   }

    public abstract string Model { get; }

}


// Inherited classes
class tesla : vehicle
{
    private readonly string model = "Model S";      // This is unchanging

    public override string Model { get { return model; }}
}

class ferrari : vehicle
{

    public override string Model { get { return "458 Spider"; }}

}
Run Code Online (Sandbox Code Playgroud)

您真正希望将值从派生构造函数传递到基本构造函数的唯一时间是在基类中主动使用这些值的时间.这通常是在您重写基础构造函数时,或者您正在使用依赖项注入或依赖项解析模式.基类不应该充当派生类的信息聚合.