using System.Collections.Generic;
namespace ConsoleApplication16
public static void Main(string[] args)
Queue<Customer> CustQue = new Queue<Customer>();
CustQue.Enqueue(new Customer() {FirstName="Sam",LastName="Smith",CurrentMeal= Customer.Meal.none});
CustQue.Enqueue(new Customer() { FirstName = "Mandy", LastName = "Cole", CurrentMeal = Customer.Meal.none });
CustQue.Enqueue(new Customer() { FirstName = "Andrew", LastName = "White", CurrentMeal = Customer.Meal.none });
CustQue.Enqueue(new Customer() { FirstName = "James", LastName = "Dewsbury", CurrentMeal = Customer.Meal.none });
CustQue.Enqueue(new Customer() { FirstName = "Malcolm", LastName = "Unwin", CurrentMeal = Customer.Meal.none });
foreach(var e in CustQue)
T.TableOpen += e.TableListener;
e.MealChanged += MealListener;
while (e.CurrentMeal != Customer.Meal.done)
T.TableOpen -= e.TableListener;
public static void MealListener(object sender, MealEventArgs e)
Customer Cust=(Customer)sender;
Console.WriteLine("{0}{1} is having a {2}", Cust.FirstName, Cust.LastName, Cust.CurrentMeal);
public delegate void TableOpenEventHandler(object sender, TableEventArgs e);
public event TableOpenEventHandler TableOpen;
Console.WriteLine("Table is Open");
TableOpen(this, new TableEventArgs());
public class TableEventArgs: EventArgs
public string FirstName { get; set; }
public string LastName { get; set; }
public Meal CurrentMeal { get; set; }
public enum Meal {none, appetizer, main, desert, done}
this.CurrentMeal = Meal.none;
public void TableListener(object sender, TableEventArgs e)
Console.WriteLine("{0}{1} got a table", this.FirstName, this.LastName);
CurrentMeal = Meal.appetizer;
CurrentMeal = Meal.desert;
public delegate void MealChangedEventHandler(object sender, MealEventArgs e);
public event MealChangedEventHandler MealChanged;
MealChanged(this, new MealEventArgs());
public class MealEventArgs : EventArgs