C#事件-1

  1 using System;
  2 using System.Collections.Generic;
  3 using System.Linq;
  4 using System.Text;
  5 using System.Threading.Tasks;
  6 
  7 
  8 namespace Wrox.ProCSharp.Delegates
  9 {
 10     public class CarInfoEventArgs:EventArgs
 11     {
 12         public CarInfoEventArgs(string car)
 13         {
 14             this.Car = car;
 15         }
 16         
 17         public string Car {get; private set;}
 18     }
 19     
 20     public class CarDealer
 21     {
 22         public event EventHandler<CarInfoEventArgs> NewCarInfo; //泛型委托,约定:第一个参数是一个对象,包含事件的发送者,第二个参数提供了事件的相关信息
 23         
 24         public void NewCar(string car)
 25         {
 26             Console.WriteLine("CarDealer, new car{0}", car);//显示car信息
 27             
 28             RaiseNewCarInfo(car);
 29         }
 30         
 31         protected virtual void RaiseNewCarInfo(string car)
 32         {
 33             EventHandler<CarInfoEventArgs> newCarInfo = NewCarInfo;
 34             if (newCarInfo != null)
 35             {
 36                 newCarInfo(this, new CarInfoEventArgs(car));
 37             }
 38         }
 39     }
 40 }
 41 
 42 ///////////////////////////////////////////////////////////////////////////////////
 43 
 44 private delegate EventHandler<CarInfoEventArgs> newCarInfo;
 45 public event EventHandler<CarInfoEventArgs> NewCarInfo
 46 {
 47     add
 48     {
 49         newCarInfo += value;
 50     }
 51     remove
 52     {
 53         newCarInfo -= value;
 54     }
 55 }
 56 
 57 ////////////////////////////////////////////////////////////////////////
 58 
 59 using System;
 60 
 61 namespace Wrox.ProCSharp.Delegates
 62 {
 63     public class Consumer
 64     {
 65         private string name;
 66         
 67         public Consumer(string name)
 68         {
 69             this.name = name;
 70         }
 71         
 72         public void NewCarIsHere(object sender, CarInfoEventArgs e)
 73         {
 74             Console.WriteLine("{0}: car {1} is new", name, e.Car);
 75         }
 76     }
 77 }
 78 
 79 ////////////////////////////////////////////////////////////////////////
 80 
 81 namespace Wrox.ProCSharp.Delegates
 82 {
 83     class Program
 84     {
 85         static void Main()
 86         {
 87             var dealer = new CarDealer();
 88             
 89             var michael = new Consumer("Michael");
 90             dealer.NewCarInfo += michael.NewCarIsHere;
 91             
 92             dealer.NewCar("Ferrari");
 93             
 94             var sebastian = new Consumer("Sebastian");
 95             dealer.NewCarInfo += sebastian.NewCarInfo;
 96             
 97             dealer.NewCar("Mercedes");
 98             
 99             dealer.NewCarInfo -=michael.NewCarIsHere;
100             
101             dealer.NewCar("Red Bull Racing");
102         }
103     }
104 }

 

posted @ 2017-09-09 13:59  巫居树  阅读(274)  评论(0编辑  收藏  举报