Листинг класса Product
Класс Product является главным классом во всей иерархии, в программе не предполагается создавать экземпляра класса Product поэтому он объявлен абстрактным. Класс содержит в себе свойства для хранения информации о товарах, метод, определяющий наличие скидки на определенную категорию товаров, который является абстрактным так как у каждой категории могут быть разные условия для проверки и конструктор для инициализации свойств.
public abstract class Product
{
public string MeasureUnit { get; set; }
public string Name { get; set; }
private decimal pricePerUnit;
public decimal PricePerUnit
{
get
{
return pricePerUnit;
}
set
{
if (value > 0)
pricePerUnit = value;
}
}
private float needQuantity;
public float NeedQuantity
{
get
{
return needQuantity;
}
set
{
if (value > 0)
needQuantity = value;
}
}
private float disconuntPercentage;
public float DiscountPercentage
{
get
{
return disconuntPercentage;
}
set
{
if (value > 0 && value < 101)
disconuntPercentage = value;
}
}
//Метод для проверки существования скидки на категорию продуктов
public abstract bool CheckDiscount();
public Product(string name, string measureUnit, decimal pricePerUnit, float needQuantity, float discountPercentage = 0)
{
this.Name = name;
this.MeasureUnit = measureUnit;
this.PricePerUnit = pricePerUnit;
this.NeedQuantity = needQuantity;
this.DiscountPercentage = discountPercentage;
}
}
Листинг класса MilkProducts
Класс MilkProducts является наследником класса Product и содержит в себе свойство, связанное только с молочной продукцией поэтому использование наследования в данном случае уместно, также класс имеет свою реализацию абстрактного метода родительского класса и конструктор для инициализации свойств.
public class MilkProducts : Product
{
private float fatPercentage;
public float FatPercentage
{
get
{
return fatPercentage;
}
set
{
if (value > 0 && value < 101)
fatPercentage = value;
}
}
public override bool CheckDiscount()
{
if (Convert.ToString(DateTime.Now.DayOfWeek) == "Saturday" && DiscountPercentage != 0)
{
Console.WriteLine(String.Format("Сегодня скидка на {0} - {1}%", Name, DiscountPercentage));
return true;
} else
{
return false;
}
}
public MilkProducts(string name, string measureUnit, decimal pricePerUnit, float needQuantity,
float fatPercentage, float discountPercentage = 0) : base (name, measureUnit, pricePerUnit, needQuantity, discountPercentage)
{
this.FatPercentage = fatPercentage;
}
}