using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace State_VendingMachineExample { internal class HasMoneyState : VMState { public HasMoneyState(VendingMachine context) { vendingMachine = context; } public override void AddMoney(decimal money) { vendingMachine.Money += money; Console.WriteLine($"Add ${money}, Balance: {vendingMachine.Money}"); } public override void ReturnChange(decimal money) { throw new ApplicationException(); } public override void SelectItem(int itemId) { decimal? price = vendingMachine.GetPrice(itemId).Value; if (!price.HasValue) { Console.WriteLine($"{itemId} not found"); return; } if (vendingMachine.Money < price.Value) { Console.WriteLine("Insufficient money"); return; } vendingMachine.State = vendingMachine.DispenseItemState; vendingMachine.State.SelectItem(itemId); } } }