Как рассчитать площадь, используя открытый закрытый принцип С#

Я работаю с открытым закрытым принципом SOLID в С#. У меня есть абстрактный класс Shape, который я хочу использовать для вычисления площади различных фигур. Как вызвать класс areaCalculator и как передать разные фигуры. Вот мой код.

public abstract class Shape
{
    public  abstract double Area();
}

public class Rectangle : Shape
{
    public double Height { get; set; }
    public double Width { get; set; }
    public override double Area()
    {
        return Height * Width;
    }
}

public class AreaCalculator
{
    public double TotalArea(Shape[] shapes)
    {
        double area = 0;
        foreach (var objShapes in shapes)
        {
            area += objShapes.Area();
        }
        return area;
    }
}

Я хочу вызвать класс areaCalculator для вычисления площади.

AreaCalculator _obj = new AreaCalculator();
            Shape[] _shapes = new Shape[2];
            var _result = _obj.TotalArea(_shapes);
            Console.WriteLine(_result);
            Console.ReadLine();

person Muhammad Kamran    schedule 15.12.2019    source источник
comment
Что заставляет вас думать, что ваш код нарушает OCP? Каков ваш актуальный вопрос?   -  person DavidG    schedule 15.12.2019
comment
Я знаю, что это не нарушает OCP. Но я хочу вызвать класс areacalculator, как это сделать?   -  person Muhammad Kamran    schedule 15.12.2019
comment
Вы звоните в этот класс, какая у вас проблема?   -  person DavidG    schedule 15.12.2019
comment
Я не знаю, как это назвать. например, я добавляю класс круга, который наследует форму, тогда какая площадь формы рассчитывается?   -  person Muhammad Kamran    schedule 15.12.2019
comment
Этот вопрос вообще не имеет отношения к OCP или SOLID, просто вы не создавали никаких объектов. Пожалуйста, в следующий раз будьте внимательнее, задавая вопросы.   -  person DavidG    schedule 15.12.2019


Ответы (1)


Вам нужно создать прямоугольные объекты и установить их высоту и ширину для расчета. Если нет, список _shapes пуст. Найдите ниже образец рабочего кода.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ShapesStacjOverflow {


    public abstract class Shape {
        public abstract double Area();
    }

    public class Rectangle : Shape {
        public double Height { get; set; }
        public double Width { get; set; }
        public override double Area() {
            return Height * Width;
        }
    }

    public class AreaCalculator {
        public double TotalArea(Shape[] shapes) {
            double area = 0;
            foreach (var objShapes in shapes) {
                area += objShapes.Area();
            }
            return area;
        }
    }
    class Program {
        static void Main(string[] args) {
            AreaCalculator _obj = new AreaCalculator();
            Shape[] _shapes = new Shape[2];
            Rectangle rectangle1 = new Rectangle {
                Width = 2,
                Height = 3
            };
            Rectangle rectangle2 = new Rectangle {
                Width = 1,
                Height = 1
            };
            _shapes[0] = rectangle1;
            _shapes[1] = rectangle2;

            var _result = _obj.TotalArea(_shapes);
            Console.WriteLine(_result);
            Console.ReadLine();
        }
    }
}

В результате возвращается 7. Если вы хотите создать другие дочерние фигуры, они должны переопределить метод Area(), поэтому для каждого из объектов, созданных в списке, будет применяться соответствующий метод Area(). Надеюсь, это поможет.

person rustyBucketBay    schedule 15.12.2019