我已经尝试了一些方法来修复错误,我似乎无法想出这个,我会非常感谢任何帮助.错误在Triangle和Square类中,Triangle中的错误是"不实现GeometricFigure的继承抽象成员"和"没有找到合适的方法来覆盖"而Square只是"找不到合适的方法来覆盖"错误.
namespace ShapesDemo
{
class Program
{
static void Main(string[] args)
{
Rectangle rec = new Rectangle(8,10);
Square squ = new Square(11, 12);
Triangle tri = new Triangle(10, 20);
Console.WriteLine("Computed area is {0}" + "\n\n" + "Computed Triangle is: {1}" + "\n", squ.ComputeArea(rec.Area), tri.ComputeArea(rec.Area));
}
}
abstract class GeometricFigure
{
public decimal _height, _width, _area;
public decimal Height
{
get { return _height; }
set { _height = value; }
}
public decimal Width
{
get { return _width; }
set { _width = value; }
}
public decimal Area
{
get { return _area; }
}
public abstract decimal ComputeArea();
}
class Rectangle : GeometricFigure
{
private decimal height, width;
public Rectangle(decimal sideA, decimal sideB)
{
this.height = sideA;
this.width = sideB;
}
public Rectangle()
{
}
public override decimal ComputeArea()
{
Console.WriteLine("The Area is" + _width.ToString(), _height.ToString());
return width * height;
}
}
class Square : Rectangle
{
public Square(decimal sideA, decimal sideB)
{
this._width = sideA;
this._height = sideB;
if (sideA != sideB)
this._height = this._width;
}
public Square(decimal xy)
{
this._width = xy;
this._height = this._width;
}
public override decimal ComputeArea(decimal _area)
{ return _area = this._width * this._height; }
}
class Triangle : GeometricFigure
{
public Triangle(int x, int y)
{
this.Width = x;
this.Height = y;
}
public override decimal ComputeArea(decimal _area)
{ return _area = (this.Width * this.Height) / 2; }
}
}
Run Code Online (Sandbox Code Playgroud)
Ada*_*cin 16
每当你覆盖一个方法时,你必须使用与基类相同的签名覆盖(协方差和逆变的例外,但那些不适用于你的问题,所以我会在这里忽略它们).
在GeometricFigure,你有声明
public abstract decimal ComputeArea();
Run Code Online (Sandbox Code Playgroud)
但在你Square和Triangle你有声明
public override decimal ComputeArea(decimal _area)
{
// ...
}
Run Code Online (Sandbox Code Playgroud)
假设其他一些类包含以下代码:
GeometricFigure fig = new Triangle(10, 10);
decimal area = fig.ComputeArea();
Run Code Online (Sandbox Code Playgroud)
哪个ComputeArea叫? Triangle没有定义ComputeArea没有参数,也没有定义GeometricFigure,所以没有有效ComputeArea的调用.因此,语言规范不允许这种情况,override只要求将其放在实际覆盖基类方法的方法上,并使用相同数量和类型的参数.由于ComputeArea(decimal)不覆盖ComputeArea(),编译器会输出错误并告诉您必须将override关键字放在ComputeArea()定义中Triangle,并且不能将override关键字置于其上ComputeArea(decimal).
这并不是说你不能定义一个方法ComputeArea(decimal)上Triangle和Square,但不能将其声明为覆盖ComputeArea()在GeometricFigure.