using System.Collections.Generic;
namespace ConsoleApplication4
public static void Main()
Queue<Customer> custQueue = new Queue<Customer>();
custQueue.Enqueue(new Customer("Suren","Dhakal"));
custQueue.Enqueue(new Customer("Baik","Sigdel"));
custQueue.Enqueue(new Customer("Santosh", "Chalise"));
custQueue.Enqueue(new Customer("Satyaraj", "Adhikari"));
custQueue.Enqueue(new Customer("Lila", "Nyaupane"));
while (custQueue.Count >0)
Customer nextCustomer = custQueue.Dequeue();
Table table = new Table();
table.TableEvent += nextCustomer.TableOpenEventListener;
while (nextCustomer.myMeal != Customer.Meals.done)
nextCustomer.CustomerEvent += CustomerMealEventListener;
nextCustomer.myNextMeal();
nextCustomer.CustomerEvent -= CustomerMealEventListener;
table.TableEvent -= nextCustomer.TableOpenEventListener;
Console.WriteLine("Everyone is Full!");
public static void CustomerMealEventListener(object sender, CustomerEventArgs e)
if(e.customer.myMeal!=Customer.Meals.done)
Console.WriteLine("{0} {1} is having {2}.", e.customer.FirstName, e.customer.LastName, e.customer.myMeal);
Console.WriteLine("{0} {1} is {2}.", e.customer.FirstName, e.customer.LastName, e.customer.myMeal);
public event TableEventHandler TableEvent;
public void TableOpenEvent()
Console.WriteLine("Table is open!");
TableEventHandler table = TableEvent;
table(this, new TableEventArgs(this));
public string FirstName { get; set; }
public string LastName { get; set; }
public enum Meals { none, appetizer, main, desert, done };
public Meals myMeal {get; set;}
public event CustomerEventHandler CustomerEvent;
public Customer(string fName, string lName)
public void TableOpenEventListener(object sender, TableEventArgs e)
Console.WriteLine("{0} {1} got a table.", this.FirstName, this.LastName);
CustomerEventHandler nextMealInfo = CustomerEvent;
nextMealInfo(this, new CustomerEventArgs(this));
public delegate void TableEventHandler(object sender, TableEventArgs e);
public delegate void CustomerEventHandler(object sender, CustomerEventArgs e);
public class TableEventArgs : EventArgs
public Table table { get; set; }
public TableEventArgs(Table t)
public class CustomerEventArgs : EventArgs
public Customer customer { get; set; }
public CustomerEventArgs(Customer c)