помогите доработать программу
Создать абстрактный класс Figure. На его основе реализовать классы Rectangle (прямоугольник), Circle (круг) и Trapezium (трапеция) с возможностью вычисления площади, центра тяжести и периметра.
Создать класс Picture, содержащий параметризованную коллекцию объектов этих классов в динамической памяти. Предусмотреть возможность вывода характеристик объектов списка. Написать демонстрационную программу, в которой будут использоваться все методы классов.
Дополнительное задание: дополнить класс методами сортировки по некоторому критерию, вывода в файл и считывания из файла.


C# Code:
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. using System.Threading.Tasks;
  6.  
  7. namespace ConsoleApp7
  8. {
  9.     class Program
  10.     {
  11.         static void Main(string[] args)
  12.         {
  13.             Figure[] Фигуры = [Ссылки могут видеть только зарегистрированные пользователи. ] Figure[6];
  14.             Фигуры[0] = [Ссылки могут видеть только зарегистрированные пользователи. ] Circle(3.0);
  15.             Фигуры[1] = [Ссылки могут видеть только зарегистрированные пользователи. ] Rectangle(4.0, 5.0);
  16.             Фигуры[2] = [Ссылки могут видеть только зарегистрированные пользователи. ] Trapezium(3.0, 4.0, 5.0,6.0,7.0);
  17.             Фигуры[3] = [Ссылки могут видеть только зарегистрированные пользователи. ] Rectangle(3.0,5.0);
  18.             Фигуры[4] = [Ссылки могут видеть только зарегистрированные пользователи. ] Rectangle(3.0, 4.0);
  19.             Фигуры[5] = [Ссылки могут видеть только зарегистрированные пользователи. ] Circle(3.0);
  20.  
  21.             for (int i = 0; i < Фигуры.Length; i++)
  22.             {
  23.                 Console.WriteLine("Площадь равна: " + Фигуры[i].Pl());
  24.                 Console.WriteLine("Центр тяжести равен: " + Фигуры[i].CT());
  25.                 Console.WriteLine("Периметр равен: " + Фигуры[i].Per());
  26.                 Console.WriteLine();
  27.             }
  28.             Console.Read();
  29.         }
  30.     }
  31.  
  32.     // абстрактный класс фигуры
  33.     abstract class Figure
  34.     {
  35.         // исключения для классов наследников
  36.         protected Exception OutOfMaxBorder = [Ссылки могут видеть только зарегистрированные пользователи. ] Exception("Исключение, превышена максимальная граница");
  37.         protected Exception NonBellowZero = [Ссылки могут видеть только зарегистрированные пользователи. ] Exception("Исключение, введенное значение не может быть отрицательным!");
  38.   
  39.          // абстрактный метод для получения площади
  40.          public abstract double Pl();
  41.          // абстрактный метод для получения центра тяжести
  42.          public abstract double CT();
  43.          // абстрактный метод для получения периметра
  44.          public abstract double Per();
  45.     }
  46.  
  47.     class Rectangle : Figure // производный класс прямоугольника
  48.     {
  49.         double a,b;
  50.         
  51.         public double A
  52.         {
  53.             get { return a; }
  54.             set { if (value > 0) a = value; }
  55.         }
  56.  
  57.         public double B
  58.         {
  59.             get { return b; }
  60.             set { if (value > 0) b = value; }
  61.         }
  62.         
  63.         public Rectangle(double a, double b)
  64.         {
  65.             this.A=a;
  66.             this.B=b;
  67.         }
  68.         
  69.         // переопределение получения площади
  70.         public override double Pl()
  71.         {
  72.             return A * B;
  73.         }
  74.  
  75.         // переопределение получения центра тяжести
  76.         public override double CT()
  77.         {
  78.             return B / 2.0;
  79.         }
  80.         // переопределение получения периметра
  81.         public override double Per()
  82.         {
  83.             return 2 * (A + B);
  84.         }
  85.     }
  86.  
  87.     class Circle : Figure //производный класс круга
  88.     {
  89.         double r;
  90.         
  91.         public double R
  92.         {
  93.             get { return r; }
  94.             set { if (value > 0) r = value; }
  95.         }
  96.         
  97.         public Circle(double r)
  98.         {
  99.             this.R=r;
  100.         }
  101.         
  102.         // переопределение получения площади
  103.         public override double Pl()
  104.         {
  105.             return Math.PI*R*R;
  106.         }
  107.  
  108.         // переопределение получения центра тяжести
  109.         public override double CT()
  110.         {
  111.             return R;
  112.         }
  113.         
  114.         // переопределение получения периметра
  115.         public override double Per()
  116.         {
  117.             return 2 * Math.PI*R;
  118.         }
  119.     }
  120.  
  121.     class Trapezium : Figure //  производный класс трапеции
  122.     {
  123.         double a,b,c,d,h;
  124.         
  125.         public double A
  126.         {
  127.             get { return a; }
  128.             set { if (value > 0) a = value; }
  129.         }
  130.  
  131.         public double B
  132.         {
  133.             get { return b; }
  134.             set { if (value > 0) b = value; }
  135.         }
  136.         
  137.         public double C
  138.         {
  139.             get { return c; }
  140.             set { if (value > 0) d = value; }
  141.         }
  142.  
  143.         public double D
  144.         {
  145.             get { return d; }
  146.             set { if (value > 0) d = value; }
  147.         }
  148.         
  149.         public double H
  150.         {
  151.             get { return h; }
  152.             set { if (value > 0) h = value; }
  153.         }
  154.  
  155.               
  156.         public Trapezium(double a, double b, double c, double d, double h)
  157.         {
  158.             this.A=a;
  159.             this.B=b;
  160.             this.C=c;
  161.             this.D=d;
  162.             this.H=h;
  163.         }
  164.         
  165.         public override double Pl()
  166.         {
  167.             return ((A + B)/2.0)*H;
  168.         }
  169.  
  170.         public override double CT()
  171.         {
  172.             return (H/3.0)*(2*B+A)/(A+B);
  173.         }
  174.         public override double Per()
  175.         {
  176.             return (A+B+C+D);
  177.         }
  178.     }
  179.     
  180.     
  181. }