C# 解决错误';没有给出与所需形式参数';对应的参数;?
我有以下代码,在C#visual Studio 2015中编译时出错C# 解决错误';没有给出与所需形式参数';对应的参数;?,c#,oop,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 Cir
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
}
由于
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;
}
}
因此,圆
是一个椭圆
,因此它有长轴
和短轴
值。您只是没有提供它们,因为它们是创建Oval
所需的值
当然,您可以为没有参数的
Oval
添加默认公共构造函数,但这会使您创建一个没有长轴
和短轴
的Oval,并且这两个构造函数似乎都是代码当前状态下唯一的构造函数所必需的。因此,您需要重新考虑如何设计类。修复错误:
该错误是由于缺少无参数构造函数(或者在构造函数中没有使用base()
方法(就像user3185569
所说的那样)造成的
修复代码:
显然,您在.NET中缺少一些基础知识,因此我决定重新编写代码,并牢记以下几点:
a、 惯例
关于应该应用于代码的常见约定,有一些规则
成员通常以m
或
开头,然后是memberName
(驼峰形大小写)
属性通常以PropertyName
的形式定期编写,这同样适用于方法
参数和变量的大小写很简单,就像parameterName
b、 访问修饰符
我不知道椭圆和圆的用途,但我假设您希望在Oval
和circle
之外访问它们
我认为最好让您在此阅读更多关于该主题的内容:
我已经重新编写了您的代码,包含了所有这些提示(并解决了您的问题)
类椭圆形:形状
{
#区域常数
私有常数双dblPIE=3.14d;
#端区
#区域成员变量
私人双m_dblMajorRad=0.0d;
专用双m_dblMinorRad=0.0d;
#端区
#区域构造函数
///
///默认构造函数
///
公共椭圆形()
{
}
///
///初始化椭圆的大半径和小半径
///
///
///
公共椭圆形(双dblOvalMajorRad,双dblOvalMinorRad)
{
m_dblMajorRad=dblOvalMajorRad;
m_dblMinorRad=dblOvalMinorRad;
}
#端区
}
类圆:椭圆形
{
#区域常数
私有常数双dblPIE=3.14d;
#端区
#区域成员变量
私人双m_dblRadius=0.0d;
#端区
#区域构造函数
///
///初始化半径
///
///
公众圈(双dblRadius)
{
m_dblRadius=dblRadius;
}
#端区
}
您需要将基类构造函数更新为以下内容:
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):base(12.2,12.2) // pass value to base class constructor
{
radius = Circle_Radius;
} //constructor
}~```
Uou还可以在基类中添加空构造函数
public Shape() {}
或
这不会强制您使用2参数构造函数。顺便说一句,现在是开始学习.NET命名约定的好时机。但是如果您遵循命名约定,每个人都会更容易阅读。为什么您认为约定对您的实际代码有用,但对示例代码却不有用?在最新的更新中,我遵循了所有这些约定谢谢。如果在这种情况下,您不想向类
Oval
的构造函数提供值,那么您可以在Oval类中定义一个无参数构造函数。public Oval(){长轴=0;短轴=0;}
@RichaGarg我犹豫了一下,因为这样你就可以创建一个没有长轴和短轴的椭圆形。这似乎不是OP想要的。这引起了关于设计继承的问题,但事情对我来说不是那么清楚。是的,你是对的!一切都取决于设计。然而,通过这个在这种方法中,我们可以为长轴和短轴定义一些默认值。仅将代码作为答案发布在StackOverflow上不是一种很好的做法。我的答案将指导您解决真正的问题,因此我发现您没有理由将其还原为不被接受。此外,您提供的解决方案在我的答案的注释中说明,并说明了原因这不是一个好的选择。@Dhiraj sardal您需要用文字描述您修改的代码。
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):base(12.2,12.2) // pass value to base class constructor
{
radius = Circle_Radius;
} //constructor
}~```
public Shape() {}
public Oval() {}