我在这个继承中的错误是什么?

What is my mistake in this inheritance?

我正在尝试创建一个 square 继承 class,它依赖于 polygon 基础 class。不幸的是,我的继承class有错误。

这是我的 polygon class :

class Polygon
{
    public int Numberofsides { get; set; }=0
    public Polygon(int numberofsides)
    {
        Numberofsides = numberofsides;
    }
}

这是我的 Square class :

class Square : Polygon
{
    public float Size { get; set; }
    public Square (float size)
    {
        Size = size;
        Numberofsides = 4;
    }
}

我的Squareclass有这个错误

there is no argument given that corresponds to the required formal parameter 'numberofsides' of 'Polygon.Polygon(int)'

不懂也不知道怎么解决

您的方块继承自 Polygon,但 Polygon 只有一个构造函数(我假设)并且您每次创建 Square 时都必须能够调用它:

public Square (float size) : base(4)
{
    Size = size;
    //Numberofsides = 4;
}

然后你可以在 Square 中排除对 NumberOfSides 的赋值,因为已经通过 Polygon

的构造函数给你了

看起来问题是您的基础 class,Polygon 没有任何 parameter-less 构造函数。因此,您必须使用派生 class.

的构造函数中的参数调用基础 class 的构造函数
class Polygon
{
    public int Numberofsides { get; set; }
    public Polygon()
    {
        Numberofsides = 0;
    }
    public Polygon(int numberofsides)
    {
        Numberofsides = numberofsides;
    }
}
class Square : Polygon
{
    public float Size { get; set; }
    public Square (float size)
    {
        Size = size;
        Numberofsides = 4;
    }
}

现在您的多边形 class 有一个不接受任何参数的默认构造函数。这样,当您在 Square class 中继承它时,它最初设置为 0,以便您可以在 Square class 构造函数中将其修改为 4。

"Polygon" class 中没有可以保存派生构造函数的 "float" 参数的基(或无参数)构造函数。

求解:

  • 在 Polygon 中定义无参数或浮点参数化构造函数

  • 对于虚拟解决方案,尝试像上面那样转换为 int

    public 方形(浮动大小):基数((整数)大小)

Jonesopolis 的回答是解决错误的方法。

但是你不应该以这种方式使用继承。这是 classic 问题:"Should Rectangle inherit from Square or should Square inherit from Recangle" 答案都不是。 (例如,此处讨论:https://softwareengineering.stackexchange.com/questions/238176/why-would-square-inheriting-from-rectangle-be-problematic-if-we-override-the-set

这里也是一样。您的 Square 不应继承自 Polygon。因为如果有人获得一个类型为 Polygon 的对象(class 实例),他可能不希望限制为 Square。它违反了 Liskov 替换原则:

Substitutability is a principle in object-oriented programming stating that, in a computer program, if S is a subtype of T, then objects of type T may be replaced with objects of type S (i.e. an object of type T may be substituted with any object of a subtype S) without altering any of the desirable properties of T (correctness, task performed, etc.).

https://en.wikipedia.org/wiki/Liskov_substitution_principle