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、触发事件
附上结果图一张:
另外,可以在DoSomething方法内打个断点,看是否有进入这响应函数。
0 0
- C# 事件简单使用
- C#事件-使用简单实例
- C#简单事件示例
- C#事件-简单实例
- 简单C#事件示例
- C#事件简单举例
- C#事件代理简单例子
- 简单的C#自定义事件
- C# 事件的简单理解
- C# 委托事件简单示例
- C#中使用事件
- c#委托和事件的简单使用,简单介绍observer设计模式
- Jquery事件简单使用
- C#事件-使用事件需要的步骤
- c# 学习笔记之九 事件(event)的使用,一个简单例子揭示机理
- C# Ping 简单使用
- C# Ping 简单使用
- C# Ping 简单使用
- win7 64位安装maven后提示mvn 不是内部或外部命令
- 图片轮播
- leetcode-3. Longest Substring Without Repeating Characters
- 5.2.3 十字链表
- 2-14 有名管道通信
- C# 事件简单使用
- 学习网址收藏积累
- 求1+2!+3!+...+20!的和
- unity3d : Failed to query D3D11 context for ID3DUserDefinedAnnotation interface (hr = 0x80004002)
- 顺序表应用2:多余元素删除之建表算法
- hdu 5869 区间内不同的GCD数(离线+树状数组)
- Linux-kernel 网桥代码分析(一)
- Android源码解析:Android的通讯机制——Handler机制
- 自动存取Android Bundle中数据,onSaveInstanceState和onRestoreInstanceState存取数据的便捷方案