Стоит ли объявлять конструкторы абстрактного класса с модификатором доступа protected? - C#

Узнай цену своей работы

Формулировка задачи:

1. Стоит ли объявлять конструкторы абстрактного класса с модификатором доступа protected? ReSharper подсказывает что стоит, не могу понять почему. Может по той же причине, что и поля? 2. Почему, когда я удаляю стандартный конструктор базового класса, в конструкторе Circle возникает ошибка?из -за того что он не ссылается на базовый? 3.В каком месте лучше объявлять переменные? 4. Можно как-то результат вывода сравнить в порядке убывания?или в данной программе это не возможно? Буду благодарен за подсказки, советы, силки.
namespace ConsoleAp
{
    internal abstract class Figure
    {
        protected double S;
        public double A { get; set; }
        protected Figure() { }
        protected Figure(double a)
        {
            A = a;
        }
        public abstract void Area();
    }
 
    internal class Square : Figure
    {
   
        public Square(double a) : base(a) {}
        public override void Area()
        {
            S = Math.Pow(A, 2);
            Console.WriteLine("Площадь квадрата: {0}", S);
        }
    }
 
    internal class Circle : Figure
    {
        private readonly double _r;  
        public Circle(double r)
        {
            _r = r;
        }
        public override void Area()
        {
            S = Math.PI*Math.Pow(_r, 2);
            Console.WriteLine("Площадь круга: {0}", S);
        }
    }
    internal class Rectangle : Figure
    {
        private readonly double _b;
        public Rectangle(double b, double a)
            : base(a)
        {
            _b = b;
        }
        public override void Area()
        {
            S = A*_b;
            Console.WriteLine("Площадь прямоугольника: {0}", S);
        }
    }
 
    internal class Program
    {
        static void Main()
        {
            Square s = new Square(10);
            Circle c = new Circle(5.5);
            Rectangle r = new Rectangle(5.5, 4);
            s.Area();
            c.Area();
            r.Area();
 
        }      
    }
}

Решение задачи: «Стоит ли объявлять конструкторы абстрактного класса с модификатором доступа protected?»

textual
Листинг программы
namespace ConsoleAp
{
    internal abstract class Figure
    {
        protected double S;
        public double A { get; set; }
        protected Figure() { }
        protected Figure(double a)
        {
            A = a;
        }
        public abstract double Area();      // ~ теперь возвращает значение, без вывода
    }
 
    internal class Square : Figure
    {
 
        public Square(double a) : base(a) { }
        public override double Area()       // ~
        {
            S = Math.Pow(A, 2);
            return S;                       // ~
        }
    }
 
    internal class Circle : Figure
    {
        private readonly double _r;
        public Circle(double r) : base(1)
        {
            _r = r;
        }
        public override double Area()       // ~
        {
            S = Math.PI * Math.Pow(_r, 2);
            return S;                       // ~
        }
    }
    internal class Rectangle : Figure
    {
        private readonly double _b;
        public Rectangle(double b, double a)
            : base(a)
        {
            _b = b;
        }
        public override double Area()       // ~
        {
            S = A * _b;
            return S;                       // ~
        }
    }
 
    internal class Program
    {
        static void Main()
        {
            Square s = new Square(10);
            Circle c = new Circle(5.5);
            Rectangle r = new Rectangle(5.5, 4);
 
            double[] arr = new double[3];       // ~
            arr[0] = s.Area();                  // ~
            arr[1] = c.Area();                  // ~
            arr[2] = r.Area();                  // ~
            Array.Sort(arr);                    // ~
 
            // Вместо нижеизложенного можно делать реверс отсортированного массива и вывод через foreach
            // либо вообще сделать по своему, без использования массива и прочего, обычным сравнением трёх значений.
            for (int i = arr.Length - 1; i >= 0; i-- )  // ~
                Console.Write(arr[i] + ", ");
 
            Console.ReadKey();
        }
    }
}

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

14   голосов , оценка 4.286 из 5
Похожие ответы