gpt4 book ai didi

c# - 找不到合适的方法来覆盖 c#

转载 作者:太空狗 更新时间:2023-10-29 17:35:08 25 4
gpt4 key购买 nike

我已经尝试了一些方法来修复错误,但我似乎无法弄清楚这一点,我将不胜感激任何帮助。错误出现在 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; }
}
}

最佳答案

每当您重写一个方法时,您必须使用与基类中相同的签名来重写(协变和逆变有异常(exception),但这些不适用于您的问题,所以我将在这里忽略它们)。

GeometricFigure 中,您有声明

public abstract decimal ComputeArea();

但是在 SquareTriangle 中你有声明

public override decimal ComputeArea(decimal _area)
{
// ...
}

假设其他一些类包含以下代码:

GeometricFigure fig = new Triangle(10, 10);
decimal area = fig.ComputeArea();

将调用哪个 ComputeAreaTriangle 没有定义一个没有参数的 ComputeAreaGeometricFigure 也没有,所以没有有效的 ComputeArea打电话。因此,语言规范通过要求 override 仅放置在实际覆盖基类方法的方法上来禁止这种情况,并且参数的数量和类型相同。由于 ComputeArea(decimal) 没有覆盖 ComputeArea(),编译器会出错并告诉您必须将 override 关键字放在 ComputeArea() 定义在 Triangle 中,并且您不能将 override 关键字放在 ComputeArea(decimal) 上。

这并不是说您不能在TriangleSquare 上定义方法ComputeArea(decimal),但您不能将其声明为重写 GeometricFigure 中的 ComputeArea()

关于c# - 找不到合适的方法来覆盖 c#,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9458572/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com