(精华)2020年8月11日 C#基础知识点 winform底层原理的讲解(发布订阅)实现控件

(精华)2020年8月11日 C#基础知识点 winform底层原理的讲解(发布订阅)实现控件

触发的事件函数

public static void Publisher()
        {<!-- -->
            Phone phone = new Phone()
            {<!-- -->
                Id = 123,
                Name = "华为P9",
                Price = 2499
            };
            // 执行订阅
            Subscriber();
            //价格变动会触发订阅者里的函数
            phone.Price = 500;
        }

发布者

/// <summary>
        /// 事件的发布者,发布事件并且在满足条件的情况下,触发事件
        /// </summary>
        public class Phone
        {<!-- -->
            public int Id {<!-- --> get; set; }

            public string Name {<!-- --> get; set; }


            private int _price;

            public int Price
            {<!-- -->
                get
                {<!-- -->
                    return _price;
                }
                set
                {<!-- -->
                    if (value < _price) //降价了
                    {<!-- -->
                        this.DiscountHandler?.Invoke(this, new XEventArgs()
                        {<!-- -->
                            OldPrice = _price,
                            NewPrice = value
                        });
                    }

                    this._price = value;

                }
            }

            public event EventHandler DiscountHandler;
        }

订阅者

public static void Subscriber()
        {<!-- -->
            //订阅:就是把订户和事件发布者关联起来
            phone.DiscountHandler += new Teacher().Buy;
            phone.DiscountHandler += new Student().Buy;
        }

订阅者类

/// <summary>
/// 订户 关注事件,事件发生之后,自己做出相应的动作
/// 价格变动会触发BUY函数
/// </summary>
        public class Teacher
        {<!-- -->
            public void Buy(object sender, EventArgs e)
            {<!-- -->
                Phone phone = (Phone)sender;
                Console.WriteLine($"this is {phone.Name}");
                XEventArgs xEventArgs = (XEventArgs)e;
                Console.WriteLine($"之前的价格{xEventArgs.OldPrice}");
                Console.WriteLine($"现在的价格{xEventArgs.NewPrice}");
                Console.WriteLine("买下来");

            }
        }

        public class Student
        {<!-- -->
            public void Buy(object sender, EventArgs e)
            {<!-- -->
                Phone phone = (Phone)sender;
                Console.WriteLine($"this is {phone.Name}");
                XEventArgs xEventArgs = (XEventArgs)e;
                Console.WriteLine($"之前的价格{xEventArgs.OldPrice}");
                Console.WriteLine($"现在的价格{xEventArgs.NewPrice}");
                Console.WriteLine("买下来");

            }
        }

事件参数

public class XEventArgs : EventArgs
        {<!-- -->
            public int OldPrice {<!-- --> get; set; }

            public int NewPrice {<!-- --> get; set; }

        }
posted @ 2020-12-31 09:27  不要摸我的腰  阅读(517)  评论(0编辑  收藏  举报