Ошибка: Невозможно создать экземпляр абстрактного класса - C#

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

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

class Program
    {
        static void Main(string[] args)
        {
 
            List<Prog> listSoft = new List<Prog>(); //массив программ
 
            Console.Clear();        //Очистка экрана
            //Задаем название окна консоли
            Console.Title = "Контрольная работа 2. Вариант 0. Классы.";
 
            //заполняем:
            // 1
            listSoft.Add( new Prog()); //добавляем без параметров
            // 2
            FreeProg freeSoft = new FreeProg();
            freeSoft.SoftName = "Графический редактор";
            freeSoft.SoftVendor = "ООО Скорпион";
            freeSoft.InstallDate = new DateTime(2016, 2, 10); //10-го февраля
            listSoft.Add(freeSoft);
            // 3
            ShareProg shareSoft = new ShareProg();
            shareSoft.SoftName = "Текстовый редактор";
            shareSoft.SoftVendor = "ООО Скорпион";
            shareSoft.InstallDate = new DateTime(2016, 2, 10); //10-го февраля
            shareSoft.ShareDays = 50;
            listSoft.Add(shareSoft);
            // 4
            PropProg propSoft = new PropProg();
            propSoft.SoftName = "САПР";
            propSoft.SoftVendor = "ООО Скорпион";
            propSoft.InstallDate = new DateTime(2016, 2, 10); //10-го февраля
            propSoft.Price = 300;
            propSoft.ExpireDate = new DateTime(2016, 4, 1); //1-го апреля
            listSoft.Add(propSoft);

            //выводим общий список:
            Console.WriteLine("---------------------------------------------------------");
            foreach (Prog soft in listSoft)
            {
                soft.PrintInfo();
            }
            //выводим с те, что можно использовать:
            Console.WriteLine("Можно использовать следующие программы:");
            foreach (Prog soft in listSoft)
            {
                if (soft.isWorking())
                    soft.PrintInfo();
            }
            Console.WriteLine("Нажмите любую клавишу...");
            Console.ReadKey();          //ожидание нажатия клавиши
 
        }
    }
 
    enum eSoftType
    {
        Unknown,
        Freeware,
        Shareware,
        Propware
    }
 
    abstract class Prog  //БАЗОВЫЙ КЛАСС
    {
        protected string m_SoftName;          //название программы, 
        protected string m_SoftVendor;          //производитель программы, 
        protected eSoftType m_SoftType;          //тип программы, 
        protected DateTime m_InstallDate;     //дата установки, 
        //конструктор без параметров
        public Prog()
        {
            m_SoftName = "Неизвествная программа";
            m_SoftVendor = "Неизвестный производитель";
            m_SoftType = eSoftType.Unknown;
            m_InstallDate = DateTime.Now;
        }
        //конструктор c параметррами
        public Prog(string softName, string softVendor, eSoftType softType, DateTime installDate)
        {
            m_SoftName = softName;
            m_SoftVendor = softVendor;
            m_SoftType = softType;
            m_InstallDate = installDate;
        }
        //===========   СВОЙСТВА ============
        public string SoftName
        {
            get { return m_SoftName; }
            set { m_SoftName = value; }
        }
 
        public string SoftVendor
        {
            get { return m_SoftVendor; }
            set { m_SoftVendor = value; }
        }
 
        public eSoftType SoftType
        {
            get { return m_SoftType; }
            set { m_SoftType = value; }
        }
 
        public DateTime InstallDate
        {
            get { return m_InstallDate; }
            set { m_InstallDate = value; }
        }
 
        //вывод информации на экран:
        public virtual void PrintInfo()
        {
            Console.WriteLine("Программа: '{0}', производитель: '{1}', тип: '{2}', дата установки: {3}'",
                               m_SoftName, m_SoftVendor, m_SoftType, m_InstallDate);
        }
        public virtual bool isWorking() //возможность использования
        {
            return true;
        }
 
    }

    class FreeProg : Prog   //Свободное 
    {
        public new eSoftType SoftType
        {
            get { return eSoftType.Freeware; }
        }
 
        //вывод информации на экран:
        public override void PrintInfo()
        {
            Console.WriteLine("Программа: '{0}', производитель: '{1}', тип: 'Бесплатная', дата установки: {2}'",
                               m_SoftName, m_SoftVendor, m_InstallDate);
        }
 
        public override bool isWorking() //возможность использования
        {
            return true;
        }
    }
   
    class ShareProg : Prog  // Условно-беспладное
    {
        private int m_ShareDays; //срок условного использования (дни)
 
        public new eSoftType SoftType
        {
            get { return eSoftType.Shareware; }
        }
        public int ShareDays
        {
            get { return m_ShareDays; }
            set { m_ShareDays = value; }
        }
        //вывод информации на экран:
        public override void PrintInfo()
        {
            Console.WriteLine("Программа: '{0}', производитель: '{1}', тип: 'Усл-Бесплатная', дата установки: {2}'",
                               m_SoftName, m_SoftVendor, m_InstallDate);
        }
 
        public override bool isWorking() //возможность использования
        {
            return (m_InstallDate.AddDays(m_ShareDays) >= DateTime.Now);
        }
 
    }

    class PropProg : Prog      // Коммерческое
    {
        private int m_Price;           //цена
        private DateTime m_ExpireDate; //дата использования по лицензии
 
        public new eSoftType SoftType
        {
            get { return eSoftType.Propware; }
        }
        public int Price
        {
            get { return m_Price; }
            set { m_Price = value; }
        }
        public DateTime ExpireDate
        {
            get { return m_ExpireDate; }
            set { m_ExpireDate = value; }
        }
        //вывод информации на экран:
        public override void PrintInfo()
        {
            Console.WriteLine("Программа: '{0}', производитель: '{1}', тип: 'Коммерческая' (цена: ${2}), дата установки: {3}'",
                               m_SoftName, m_SoftVendor, m_Price, m_InstallDate);
        }
 
        public override bool isWorking() //возможность использования
        {
            return (m_ExpireDate >= DateTime.Now);
        }
 
    }
}
Ругается вот на эту часть кода:
listSoft.Add( new Prog());
Пишет ошибку: Невозможно создать экземпляр абстрактного класса 1.Prog Помогите,пожалуйста,ее исправить...

Решение задачи: «Ошибка: Невозможно создать экземпляр абстрактного класса»

textual
Листинг программы
FreeProg freeSoft = new FreeProg();
            freeSoft.SoftName = "Графический редактор";
            freeSoft.SoftVendor = "ООО Скорпион";
            freeSoft.InstallDate = new DateTime(2016, 2, 10); //10-го февраля

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


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

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

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