私はエラーを修正するためにいくつかのことを試みましたが、私はこれを理解できないようです。エラーはTriangleクラスとSquareクラスの両方であり、Triangleのエラーは "GeometricFigureから継承した抽象メンバを実装していません"と "オーバーライドに適したメソッドが見つかりませんでした"で、Squareは "適切なメソッドが見つかりませんでした"適切なメソッドがCのオーバーライドに見つかりませんでした。C#
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; }
}
}
答えを指定するとパラメータを削除すると問題が解決すると言われています*さらに、現在のように機能していれば、意図したとおりに動作しません* _areaは再宣言する必要はありませんすでにクラスフィールドであるため、メソッドのパラメータ。あなたは今、クラスフィールドに何もしていないので、基本的に何もしていない関数の範囲内の_areaの2番目の宣言に代入していますが、代わりにメソッド内の_areaのローカル宣言に代入しています。 –