"Does not contain a constructor that takes 0 arguments",以及如何从另一个 class 访问受保护的值

"Does not contain a constructor that takes 0 arguments", and how to access protected values from another class

我有两个问题。一个是 Box 继承了 Rectangle 的值,但我得到了错误 "Does not contain a constructor that takes 0 arguments"。这是什么意思?

class Box : Rectangle
{
    private double height;
    private double Height
    {
        get { return height; }
        set { if (value > 0) height = value; }
    }

    //Error for box: Does not contain a constructor that takes 0 arguments
    public Box (double l, double w, double h)
    {
        length = l;
        width = w;
        height = h;
    }

    public double findArea(double h)
    {
        return h * h;
    }

    public double findVolume(double l, double w, double h)
    {
        return l * w * h;
    }

    public String toString()
    {
        return ("The volume is " + " cm");
    }
}

另一个问题,我无法从 Rectangle class 访问 protected 值,我也不确定该怎么做,因为我阅读并尝试了其他网站的方法但是我不是很懂。

Does not contain a constructor that takes 0 arguments

发生这种情况是因为您的基础 class Rectangle 实际上不包含这样的构造函数,但您没有指定要调用的其他构造函数。当你的 class 的构造函数没有指定要调用的基 class 构造函数时,无参数构造函数是默认的,但是由于基 class 中不存在一个,你会得到一个编译时错误。

从您发布的代码推断 Rectangle 的声明是什么,我猜您希望 Box 构造函数看起来像这样:

public Box (double l, double w, double h)
    : base(l, w)
{
    height = h;
}

至于无法访问protected会员,那是根本不可能的。派生 class 始终可以访问具有 protected 可访问性的任何基础 class 成员。如果您在这样做时遇到问题,那么您还有其他地方做错了。

但是如果没有关于问题的具体信息,就不可能说出那是什么。您需要提供您收到的 确切 错误消息,以及可靠地重现该问题的 a good, minimal, complete code example