我如何克服错误'没有给出与所需形式参数相对应的参数'?

Dhi*_*dal 1 c# oop

我有以下代码,我在C#visual Studio 2015中编译时遇到错误.

class Oval:Shape
{
    private double major_axis, minor_axis;
    public Oval(double Major_Axis, double Minor_Axis)
    {
      major_axis = Major_Axis;
      minor_axis = Minor_Axis;
    } //Constructor
}
class Circle:Oval
{
    private double radius;
    public Circle(double Circle_Radius) // Getting Error on this line
    {
      radius = Circle_Radius;  
    } //constructor
}
Run Code Online (Sandbox Code Playgroud)

Zei*_*kki 8

由于Circle继承自Oval,在您创建Circle默认构造函数时,Oval在您的情况下调用.由于该构造函数接受2个参数,因此需要显式调用构造函数并提供它们:

class Circle : Oval
{
    private double radius;
    public Circle(double Circle_Radius) : base(0, 0) // change to whatever values
    {
      radius = Circle_Radius;  
    }
}
Run Code Online (Sandbox Code Playgroud)

所以A Circle是一个Oval,所以它有major_axisminor_axis价值.你只是没有提供它们,因为它们是创建一个必需的值Oval.

当然你也可以添加一个默认公共构造为Oval不带任何参数,但是,让你创建一个椭圆形,没有major_axisminor_axis两者似乎在你的代码的当前状态的唯一的构造要求.因此,您需要重新思考如何设计类.

  • @RichaGarg我犹豫着说自己,因为这样你就可以创造一个没有长轴和短轴的"椭圆形".OP似乎并非如此.这引发了关于继承设计的问题,但事情对我来说并不是那么清楚. (2认同)

shi*_*510 5

修正错误:

由于缺少无参数构造函数(或您base()在构造函数中缺少使用方法)而导致发生错误(就像user3185569已经说过的那样)

修改您的代码:

显然您似乎缺乏.Net的一些基础知识,因此我决定考虑以下几点来重新编写您的代码:

一种。约定

有一些关于通用约定的规则应适用于您的代码。

成员通常以m或开头,_然后是memberName(骆驼纹)

属性通常按规则编写,PropertyName并且同样适用于方法

参数和变量只是像驼峰一样 parameterName

b。访问修饰符

我不知道您使用椭圆形和圆形,但是我想您想在Oval和之外访问它们Circle

我认为最好参考一下此处以阅读有关该主题的更多信息:https : //msdn.microsoft.com/zh-cn/library/ms173121.aspx

我已经重新编写了您的代码,以包括所有这些技巧(并解决了您的问题)

public class Oval:Shape
{

    //Constructor
    public Oval(double majorAxis, double minorAxis)
    {
      MajorAxis=majorAxis;
      MinorAxis=minorAxis;
    } 

    protected double MajorAxis{ get; set; }

    protected double MinorAxis{ get; set; }

}


public class Circle:Oval
{

    //Constructor
    public Circle(double radius): base(radius,radius)
    {
      radius = Circle_Radius;  
    } //constructor

    public double Radius
    {
        get
        {
            return MajorAxis;
        }
        set
        {
            MajorAxis = value;
            MinorAxis = value;
        }

    }
}
Run Code Online (Sandbox Code Playgroud)