返回子属性的继承方法不起作用 C#

Hon*_*nza 0 c# inheritance

我有两节课TaxiVan。可以说van1是 的一个实例Van。每当我跑步时van1.ReturnNumOfPass(),它都无法正常工作。

我认为它会返回Taxi.num_of_pass。有什么方法可以修复或者我必须重写该方法吗?先感谢您

internal class Taxi
{
    private string SPZ;
    private int num_of_pas;
    private int max_num_of_pas = 4;

    public virtual int ReturnNumOfPas() => num_of_pas;
}


internal class Van : Taxi
{
    private string SPZ;
    private int num_of_pas;
    private int max_num_of_pas = 2;  
}

 



Run Code Online (Sandbox Code Playgroud)

我尝试在返回this之前添加num_of_pass

Eni*_*ity 6

您将其num_of_pas作为private每个类中的变量 - 这意味着它们是独立变量。

如果您想Van使用与 相同的内容num_of_pasTaxi请将其声明为protectedinTaxi并从 中删除声明Van。像这样:

internal class Taxi
{
    protected int num_of_pas = 4;

    public virtual int ReturnNumOfPas()
    {
        return num_of_pas;
    }
}

internal class Van : Taxi
{
    public Van()
    {
        num_of_pas = 8;
    }
}
Run Code Online (Sandbox Code Playgroud)

为了测试这一点,我运行了这段代码:

Van van = new();
Console.WriteLine(van.ReturnNumOfPas());
Run Code Online (Sandbox Code Playgroud)

结果是8输出到Console.


如果我编写更惯用的 C#,那么我可能会期望这样的内容:

internal class Taxi
{
    public int NumberOfPassengers { get; protected set; } = 4;
}

internal class Van : Taxi
{
    public Van()
    {
        this.NumberOfPassengers = 8;
    }
}
Run Code Online (Sandbox Code Playgroud)

我们通常会使用属性来返回值,而不是函数。