public static void Main(string[] args) { TrainSignal trainSignal = new TrainSignal(); new Car(trainSignal); new Car(trainSignal); new Car(trainSignal); new Car(trainSignal); trainSignal.HereComesATrain(); Console.WriteLine(); trainSignal.TrainIsGone(); Console.WriteLine(); //events are delegate references that you cant invoke/assign directly //trainSignal.TrainsAreComing(); //trainSignal.TrainsAreComing = null; //so no accident today:( trainSignal.HereComesATrain(); Console.ReadLine(); //adding and removing Cow charlie = new Cow(); charlie.Mooing += () => Console.WriteLine("Moo!"); charlie.AnnoyTheCow(); Console.ReadLine(); //eventhandler Script s1 = new Script { Name = "Raiku" }; s1.Interrupt += interrupt; Script s2 = new Script { Name = "Barburas" }; s2.Interrupt += interrupt; Script caster = new Random().Next() % 2 == 0 ? s1 : s2; caster.CastInterrupted(); Console.ReadLine(); }