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

时间:2017-01-26 15:15:36

标签: c# c#-3.0

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

这是我的polygon课程:

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

这是我的Square课程:

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

我的Square班级有此错误

  

没有给出的参数对应于'Polygon.Polygon(int)'所需的形式参数'numberofsides'

我不明白并知道如何解决它。

4 个答案:

答案 0 :(得分:4)

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

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

然后,您可以将作业排除在NumberOfSides中的Square,因为已经通过Polygon

的构造函数将其分配给您

答案 1 :(得分:1)

看起来问题是您的基类Polygon没有任何无参数构造函数。因此,您必须使用派生类的构造函数中的参数调用基类的构造函数。

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;
    }
}

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

答案 2 :(得分:1)

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

要解决:

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

  • 对于虚拟解决方案尝试转换为int,如上所述

    public Square(float size):base((int)size)

答案 3 :(得分:1)

Jonesopolis'答案是修复错误的解决方案。

但是你不应该以这种方式使用继承。这是经典的问题:"矩形应该继承自Square还是Square应该继承Recangle"答案不是。 (例如,这里讨论:https://softwareengineering.stackexchange.com/questions/238176/why-would-square-inheriting-from-rectangle-be-problematic-if-we-override-the-set

这同样适用。你的Square不应该继承Polygon。因为如果有人获得了Polygon类型的对象(类实例),他可能不会期望对Square有限制。它违反了Liskov Substitution原则:

  

可替代性是面向对象编程说明的一个原则   在计算机程序中,如果S是T的子类型,那么对象是   类型T可以用类型S的对象(即类型的对象)替换   T可以用子类型S)的任何对象代替而不改变   T的任何理想属性(正确性,任务执行,   等)。

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