Ошибка: Невозможно создать экземпляр абстрактного класса - 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());
Решение задачи: «Ошибка: Невозможно создать экземпляр абстрактного класса»
textual
Листинг программы
FreeProg freeSoft = new FreeProg(); freeSoft.SoftName = "Графический редактор"; freeSoft.SoftVendor = "ООО Скорпион"; freeSoft.InstallDate = new DateTime(2016, 2, 10); //10-го февраля