C# 事件简单使用

来源:互联网 发布:淘宝男装女装好做 编辑:程序博客网 时间:2024/06/06 05:42
事件采用发布/订阅模型,其中发布者决定在什么情况引发事件,而订阅者决定为响应事件而执行的操作。事件可以有多个订阅者,此时,将在事件被触发是同步调用事件处理程序。如果事件没有订阅者,将不会引发。订阅者可处理来自多个发布者的多个事件。事件是一种回调,可以将方法作为参数传递给另一个参数,在C#中,这种回调被称为委托。事件处理程序不过是通过委托调用的方法,这类似于C/C++中函数指针。委托类型定义了一个方法签名,可将任何具有兼容签名的方法与委托向关联。废话不多说直接上代码
    /// <summary>    /// 自定义事件委托,将 数据(此处只有data) 传递给订阅者    /// 定义此类,纯粹是为了传递数据    /// </summary>    public class CustomerEventArgs : System.EventArgs    {        private readonly string _data;        public string Data { get { return _data; } }        public CustomerEventArgs(string str)        {            this._data = str;        }    }    // 事件的发布者Contact    public class Contact    {        //两个都是发布事件        public event EventHandler<CustomerEventArgs> DataChanged;        //public event EventHandler DataChangedAgain;   //此事件就是没有使用自定义数据        // 定义事件引发方法        protected virtual void OnDataChanged(CustomerEventArgs e)        {            EventHandler<CustomerEventArgs> hander = DataChanged;            if (hander != null)            {                hander(this, e);            }            // 简化调用,与上面的作用一样            // DataChanged?.Invoke(this, e);         }        public string Data        {                       set            {                                CustomerEventArgs arg = new CustomerEventArgs(value);                this.OnDataChanged(arg);            }        }        public override string ToString()        {            return "This is Contact,the data has changed to : ";        }    }    public class EventTest    {        /// <summary>        /// 订阅者        /// </summary>        /// <param name="sender">事件引发者</param>        /// <param name="e">自定义传递参数</param>        public void DoSomething(Object sender, CustomerEventArgs e)        {            Console.WriteLine(sender.ToString() + e.Data);        }        public void Test()        {            var contact = new Contact();            contact.DataChanged += DoSomething; //订阅事件            var words = Console.ReadLine();            contact.Data = words;        }    }

还是,稍微说一下使用的步骤吧,方便以后理解。

首先,事件使用的委托是: EventHander

使用事件的步骤:
1、确定是否需要自定义数据,需要则从System.EventArgs派生新类
2、创建事件发布者类Contact,并发布事件:public event EventHandler DataChanged
3、在发布者类定义引发事件
4、创建订阅者(定义响应函数)
5、订阅事件 contact.DataChanged += DoSomething;
6、触发事件

附上结果图一张:
输入new string

另外,可以在DoSomething方法内打个断点,看是否有进入这响应函数。

0 0
原创粉丝点击