C#事件自我理解
来源:互联网 发布:益盟按部就班指标源码 编辑:程序博客网 时间:2024/05/17 22:09
上图是使用事件的5个源代码组件。
(1)事件里包含了一个私有委托。即委托类型声明。
如果没有显示声明的话,委托使用的是System命名空间中的EventHandler标准事件委托:
public delegate void EventHandler(object obj,EventArgs args);
其中EventArgs类型参数被设计为不能传递任何数据。如果希望传递数据的话,必须声明一个从EventArgs继承的类,然后显示声明一个委托类型:
//自定义EventArgs参数(可以接收参数)
public class MyEventArgs : EventArgs
{
public string Message = "";
public MyEventArgs(string message)
{
Message = message;
}
}
public delegate void MyEventHandler(object obj,MyEventArgs args);
(2)发布者类
包含事件声明:
public event EventHandler Elapsed;
和外界事件调用方式
(3)订阅者类
主要是 需要注册到事件上的时间处理程序。
(4)事件注册
将订阅者类中的程序注册到发布者类中的事件
完整简单事件代码如下所示:
//自定义EventArgs参数(可以接收参数)
public class MyEventArgs : EventArgs
{
public string Message = "";
public MyEventArgs(string message)
{
Message = message;
}
}
//自定义委托类型声明(如果不是自定义,则使用系统已经拥有的EventHandler)
public delegate void MyEventHandler(object obj,MyEventArgs args);
//事件发布者publisher
public class MyTimerClass
{
//声明事件(两种方式)
public event EventHandler<MyEventArgs> Elapsed;//使用泛型
//public event MyEventHandler Elapsed;//自定义一个MyEventHandler委托
//事件调用
private void OnOneSecond(object obj,EventArgs args)
{
MyEventArgs args1 = new MyEventArgs("Message From OnOneSecond");
if (Elapsed != null)
{
Elapsed(obj, args1);
}
}
//private System.Timers.Timer MyPrivateTimer;
public MyTimerClass()
{
//创建一个私有定时器
System.Timers.Timer MyPrivateTimer = new System.Timers.Timer();
//给私有定时器注册事件
MyPrivateTimer.Elapsed += OnOneSecond;
MyPrivateTimer.Interval = 1000;
MyPrivateTimer.Enabled = true;
}
}
//事件处理程序(订阅者)
public class ClassA
{
public void TimerHandlerA(object obj,MyEventArgs args)
{
Console.WriteLine("ClassA receive Message:{0}",args.Message);
}
}
public class ClassB
{
public static void TimerHandlerB(object obj,MyEventArgs args)
{
Console.WriteLine("ClassB receive Message:{0}", args.Message);
}
}
class Program
{
static void Main(string[] args)
{
//发布者实例化
MyTimerClass time = new MyTimerClass();
//订阅者实例化
ClassA a = new ClassA();
//事件注册
time.Elapsed += a.TimerHandlerA;
time.Elapsed += ClassB.TimerHandlerB;
//事件调用
Thread.Sleep(3250);
}
}
0 0
- C#事件自我理解
- C#控件的事件重写的理解与自我观点
- 事件冒泡原理自我理解以及使用
- c#委托、事件理解
- C#委托事件理解
- C# 事件的理解
- 自我理解
- C#委托,事件理解入门
- C#委托,事件理解入门
- C#委托,事件理解入门
- C#委托,事件理解入门
- C#事件的个人理解
- C#委托,事件理解入门
- C#委托,事件理解入门
- C#委托,事件理解入门
- 对C#事件的理解
- C#委托,事件理解入门
- C#委托和事件理解
- 20141111 N2
- POJ 1328 Radar Installation-放置雷达(贪心,区间,二维转一维)
- java json 嵌套
- 浅析java callback 回调模式
- 访谈章亦春
- C#事件自我理解
- [iOS学习]iOS开发中视图相关的小笔记:push、modal、popover、replace、custom
- JS检查密码强弱
- 如何快速判断这几个数是否在那40亿个数当中?
- C++学习总结
- undo_retention设置以及优化
- Axure 7.0教程_小楼作品(十六)多值单变量的页面传值
- (iOS)基于XMPP协议的简单IM实现
- html-基本form元素---ShinePans