public static void Main()
Beverage obj = new DarkRoast(Size.Medium);
Console.WriteLine(obj.GetDescription() + " Cost: $" + obj.Cost());
Beverage obj1 = new DarkRoast(Size.Large);
Console.WriteLine(obj1.GetDescription() + " Cost: $" + obj1.Cost());
public abstract class Beverage
public string description = "Unknown Beverage" ;
public Size size = Size.Regular;
public virtual string GetDescription()
public abstract double Cost();
public class DarkRoast : Beverage
public DarkRoast(Size size)
description = "Dark roast";
public override double Cost()
public class Mocha :Beverage
public Mocha(Beverage beverage)
this.beverage = beverage;
public override string GetDescription()
return beverage.GetDescription() + ", Mocha";
public override double Cost()
Size size = beverage.size;
if (size == Size.Regular )
return beverage.Cost() + 20;
else if (size == Size.Medium)
return beverage.Cost() + 40;
return beverage.Cost() + 60;
public class Soya :Beverage
public Soya(Beverage beverage)
this.beverage = beverage;
public override string GetDescription()
return beverage.GetDescription() + ", Soya";
public override double Cost()
Size size = beverage.size;
if (size == Size.Regular )
return beverage.Cost() + 25;
else if (size == Size.Medium)
return beverage.Cost() + 50;
return beverage.Cost() + 75;
public class Cream :Beverage
public Cream(Beverage beverage)
this.beverage = beverage;
public override string GetDescription()
return beverage.GetDescription() + ", Cream";
public override double Cost()
Size size = beverage.size;
if (size == Size.Regular )
return beverage.Cost() + 100;
else if (size == Size.Medium)
return beverage.Cost() + 120;
return beverage.Cost() + 160;