I define event class publisher
class Car { public string Name { get; set; } public Car(string name) { Name = name; } public event EventHandler Started; public void Start() { if (Started != null) Started(this, EventArgs.Empty); } } subscriber class
class Driver { public string Name { get; set; } public Driver(string name) { Name = name; } } I'm testing
static void Main(string[] args) { var fomenko = new Driver("Фоменко"); var shumaher = new Driver("Шумахер"); var vasya = new Driver("Вася"); Driver[] drivers = new Driver[] { fomenko, shumaher, vasya }; List<Car> cars = new List<Car>(); foreach (var driver in drivers) { var car = new Car ( driver == fomenko ? "Маруся" : driver == shumaher ? "Ф1" : "Запорожец" ); car.Started += delegate(object o, EventArgs ea) { Console.WriteLine("Стартовала машина {0} с пилотом {1}", car.Name, driver.Name); }; cars.Add(car); } foreach (var car in cars) { car.Start(); } Console.ReadKey(); } Gives out
Стартовала машина Маруся с пилотом Вася Стартовала машина Ф1 с пилотом Вася Стартовала машина Запорожец с пилотом Вася I would like to
Стартовала машина Маруся с пилотом Фоменко Стартовала машина Ф1 с пилотом Шумахер Стартовала машина Запорожец с пилотом Вася Why it happens? How to fix?
Version C # 3.0 .Net 3.5