using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace State_VendingMachineExample { internal class DispenseItemState : VMState { public DispenseItemState(VendingMachine context) { vendingMachine = context; } public override void AddMoney(decimal money) { throw new ApplicationException(); } public override void ReturnChange(decimal money) { throw new ApplicationException(); } public override void SelectItem(int itemId) { decimal? price = vendingMachine.GetPrice(itemId).Value; // Dispense item here Console.WriteLine($"Dispense Item#{itemId} ({price.Value})"); vendingMachine.Money -= price.Value; vendingMachine.State = vendingMachine.DispenseChangeState; vendingMachine.State.ReturnChange(vendingMachine.Money); } } }