c# 事件

       定义:事件在类中声明且生成,且通过使用同一个类或其他类中的委托与事件处理程序关联。包含事件的类用于发布事件。这被称为 发布器(publisher) 类。其他接受该事件的类被称为 订阅器subscriber) 类。事件使用 发布-订阅(publisher-subscriber) 模型。

发布器(publisher) 是一个包含事件和委托定义的对象。事件和委托之间的联系也定义在这个对象中。发布器(publisher)类的对象调用这个事件,并通知其他的对象。

订阅器(subscriber) 是一个接受事件并提供事件处理程序的对象。在发布器(publisher)类中的委托调用订阅器(subscriber)类中的方法(事件处理程序)。

       事件与委托的区别:委托是一种类型,在vs里面的着色和类型的颜色是一样的,大家应该有注意到,事件是委托的的实例,比如Student是一种类型,tom就是Student的一个实例,事件加上了event关键字,只允许在事件申明类里面去赋值和invoke,不允许在外面和子类里面声明

c# 事件
 //事件发布者并触发事件
    class Phone
    {
        public string name { get; set; }
        public int _price;
        public int price { 
            get 
            {
                return this._price;
            }
            set 
            {
                if (this._price > value)
                {
                    DiscountHandler.Invoke(this, new PhoneArgs() { oldprice = this._price, newprice = value });
                }
                this._price = value;
            }
            }
        public event EventHandler DiscountHandler;
    }

    //事件参数 
    class PhoneArgs : EventArgs
    { 
        public int newprice { get; set; }
        public int oldprice { get; set; }
    }

    //订阅类
    public class Student
    {
        public void Buy(object obj, EventArgs s)
        {
            Phone phone = (Phone)obj;
            PhoneArgs eventArgs = (PhoneArgs)s;
            Console.WriteLine("之前的价格:"+ eventArgs.oldprice);
            Console.WriteLine("新价格:" + eventArgs.newprice);
        }
    }
  Phone phone = new Phone()
            {
                name = "华为",
                price = 1234
            };
            phone.DiscountHandler +=new Student().Buy;
            phone.price = 1000;
View Code

c# 事件

上一篇:编译Nacos,解决No Server available 以及 failed to req API__nacos_v1_ns_instance after all servers


下一篇:CVE-2020-16898 "Bad Neighbor " Windows TCP/IP远程代码执行漏洞学习