Стоит ли объявлять конструкторы абстрактного класса с модификатором доступа 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(); } } }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д