WeakEvent的使用

class Program
    {
        static void Main(string[] args)
        {
            var dealer = new CarDealer();

            var michael = new Consumer("Michael");
            WeakEventManager<CarDealer, CarInfoEventArgs>.AddHandler(dealer, "NewCarInfo", michael.NewCarIsHere);

            dealer.NewCar("Mercedes");
            Console.WriteLine("-----------------------------------------------------------------");
            var sebastian = new Consumer("Sebastian");
            WeakEventManager<CarDealer, CarInfoEventArgs>.AddHandler(dealer, "NewCarInfo", sebastian.NewCarIsHere);
            dealer.NewCar("Ferrari");
            Console.WriteLine("-----------------------------------------------------------------");
            WeakEventManager<CarDealer, CarInfoEventArgs>.RemoveHandler(dealer, "NewCarInfo", michael.NewCarIsHere);
            dealer.NewCar("Red Bull Racing");

            Console.ReadKey();
        }
    }

    public class CarInfoEventArgs : EventArgs
    {
        public CarInfoEventArgs(string car)
        {
            this.Car = car;
        }
        public string Car { get; private set; }
    }

    public class Consumer
    {
        private string name;

        public Consumer(string name)
        {
            this.name = name;
        }

        public void NewCarIsHere(object sender, CarInfoEventArgs e)
        {
            Console.WriteLine("{0}: car {1} is new", name, e.Car);
        }
    }

    public class CarDealer
    {
        public event EventHandler<CarInfoEventArgs> NewCarInfo;

        public void NewCar(string car)
        {
            Console.WriteLine("CarDealer,new car {0}", car);

            RaiseNewCarInfo(car);
        }

        protected virtual void RaiseNewCarInfo(string car)
        {
            EventHandler<CarInfoEventArgs> newCarInfo = NewCarInfo;
            if (newCarInfo != null)
            {
                newCarInfo(this, new CarInfoEventArgs(car));
            }
        }
    }

在使用WeakEvent的过程中除了要加入Windows命名空间的引用外,还需要注意AddHandler和RemoveHandler的第二参数虽然是个字符串,但是它表明的时源事件的代理,AddHandler或者RemoveHandler会搜索它来注册事件或者注销事件,所以它是特定的源事件的代理的字符表示。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 135,009评论 19 139
  • 当日子过成了鸡肋,该怎么办? 晚上好不容易等孩子睡觉了,刚打开app准备学习英语,却收到了老搭档的微信吐槽。...
    沐汐随语阅读 937评论 1 2
  • 人的三种认知心里,一,经验性认知。一个人对一件事的反应很大程度取决于他之前的积极的或者消极的经验。如一朝被蛇咬,十...
    大书没长大阅读 181评论 0 0
  • 初 见 夜店,她是人气最旺的DJ。漂亮的她被台下很多人注视着,也包括他。身旁的兄弟...
    夏天的电吉他阅读 293评论 0 0
  • (1) 在《鲁豫有约之大咖一日行》中,王健林在谈自己对于年轻人创业以及追逐梦想的看法时,随意说了这样一句话:“先定...
    古侯子阅读 18,715评论 34 38