C# 创建计算面积的程序

C# 创建计算面积的程序,c#,area,C#,Area,我有四个错误,我正在挣扎 在用于打印形状区域的WriteLine块中,变量“area”出现的两个位置都会显示错误消息:“名称“area”在当前上下文中不存在”。第二个问题是在类Rectangle:GeometricFigure中,对于'ComputeArea',错误显示为“'Rectangle.ComputeArea()'隐藏继承的成员'GeometricFigure.ComputeArea()”。如果要隐藏,请使用new关键字。“最后一个错误在类Triangle:GeometricFigure

我有四个错误,我正在挣扎


在用于打印形状区域的WriteLine块中,变量“area”出现的两个位置都会显示错误消息:“名称“area”在当前上下文中不存在”。第二个问题是在类Rectangle:GeometricFigure中,对于'ComputeArea',错误显示为“'Rectangle.ComputeArea()'隐藏继承的成员'GeometricFigure.ComputeArea()”。如果要隐藏,请使用new关键字。“最后一个错误在类Triangle:GeometricFigure中,与'public Triangle'中的'Triangle'有关。”(int x,int y)“表达式。错误消息显示“'Rectangle.ComputeArea()”隐藏继承的成员'GeometricFigure.ComputeArea()”。如果要隐藏,请使用new关键字

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using static System.Console;
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(area), tri.ComputeArea(area));
    }
}
abstract class GeometricFigure
{
    public GeometricFigure(decimal sideA, decimal sideB)
    {
        this.height = sideA;
        this.width = sideB;
    }
    protected decimal area;
    protected decimal width;
    protected decimal height;
    public decimal Height
    {
        get
        {
            return height;
        }
        set
        {
            height = value;
            ComputeArea();
        } 
    }
    public decimal Width
    {
        get
        {
            return width;
        }
        set { width = value; }
    }
    public decimal Area
    {
        get { return area; }
        set { area = value; }
    }
    public void ComputeArea()
    {
    }
}
class Rectangle : GeometricFigure
{
    public Rectangle(decimal sideA, decimal sideB) : base(sideA, sideB)
    {

    }
    public void ComputeArea()
    {
        area = width * height;
        WriteLine("The Area is" + width.ToString(), height.ToString());
    }
    static void Display(Rectangle rec)
    {

    }
}
class Square : GeometricFigure
{
    static void Display(Square squ)
    {
    }
    public Square(decimal sideA, decimal sideB) : base(sideA, sideA)
    {
    }
}
class Triangle : GeometricFigure
{
    static void Display(Triangle tri)
    {
    }
    public Triangle(int x, int y)
    {
        this.Width = x;
        this.Height = y;
    }
}

}

Microsoft文档提供了一个很好的示例,说明了您在这里试图实现的目标,通常您希望:

  • 抽象什么是常见的(在这种情况下是计算面积)
  • 指定混凝土中不常见的部分

  • 名称区域不存在,因此您无法使用它。Main()方法无法访问该区域。我认为您正在尝试执行以下操作:

    class Program
        {
            static void Main(string[] args)
            {
                Rectangle rec = new Rectangle(8, 10);
                Square squ = new Square(11, 12);
                squ.ComputeArea();
                Triangle tri = new Triangle(10, 20);
                tri.ComputeArea();
                Console.WriteLine("Computed area is {0}" + "\n\n" + "Computed Triangle is: {1}" + "\n",
                squ.Area, tri.Area);
                Console.ReadLine();
            }
        }
    
    但是你也有一个更大的设计问题。使用GeometricFigure基类会给你带来很多问题。我会完全装备它,或者使用一个接口。你的三角形还需要:

    public Triangle(decimal sideA, decimal sideB) : base(sideA, sideA)
            {
                this.Width = sideA;
                this.Height = sideB;
            }
    

    “名称'area'在当前上下文中不存在”-正确,您没有要传入的'area'。最好猜测您想要
    squ.area
    并在Square.ComputeArea()中编写代码设置其区域成员字段。您可以使用
    override
    关键字覆盖现有成员。但是,这假定该成员在您的抽象基类中是
    virtial
    abstract
    。谢谢。帮助很大。