/*
说明:学习 delegate 笔记。
作者:二泉。
*/
using System;
namespace ccxx{
//---------------------------定义包含 事件数据 的类:MyEventArgs---------------------------------------
///定义 EventArgs
/*
定义一个提供事件数据的类。该类必须从 System.EventArgs(它是事件数据的基类)导出。示例如下。
注意 如果已存在事件的事件数据类,或者没有与您的事件关联的数据,则不需要该步骤。如果没有事件数据,请使用基类 System.EventArgs。
以上摘自: ms-help://MS.MSDNQTR.2003FEB.2052/cpguide/html/cpconprovidingeventfunctionality.htm
*/
public class MyEventArgs:System.EventArgs{
private readonly String _name;
public MyEventArgs(String name){
this._name = name;
}
public String name{
get
{
return(this._name);
}
}
}///end class MyEventArgs
//---------------------------end class MyEventArgs---------------------------------------
///声明事件的委托--代理类
/*
注意 如果事件不生成数据,您不需要声明自定义委托。在这种情况下,请使用基事件处理程序 System.ComponentModel.EventHandler。
*/
public delegate void MyEventHandler(object s,MyEventArgs e);
//------------------------------定义 事件 类------------------------------------
/*
1、可将此类看作比较常用的类,如 Button 类。
2、给该类定义 Click 事件,同时定义触发该事件的方法 OnClick
*/
public class MyEvent{
///声明一个事件
///这是事件类必须提供的。
///这是 MyEventHandler 类型的一个委托
public event MyEventHandler Click;
///声明执行事件的方法
public void OnClick(String name){
MyEventArgs Args = new MyEventArgs(name);
if(Click!=null)
Click(this,Args);
}
}///end class MyEvent
//--------------------------------end of class MyEvent----------------------------------
public class erquan{
public static void erquan_Click(object o,MyEventArgs e){
Console.Write("执行该事件的类:"+o.ToString()+" 。"+e.name);
}
public static void Main(){
///可以把 evt 看作是一个 Button 类的实例。
MyEvent evt = new MyEvent();
///把已经定义好的方法加入 evt 的事件链表中。
///这里不要自作聪明的写作 evt.Click = evt.Click + new MyEventHandle(erquan_Click)
///也就是这里的 += 和 字符串连接符的 += 的意义不同!!
evt.Click += new MyEventHandler(erquan_Click);
///执行 带数据的方法。
evt.OnClick("学习 delegate ......");
}
}//end of class erquan
}
说明:学习 delegate 笔记。
作者:二泉。
*/
using System;
namespace ccxx{
//---------------------------定义包含 事件数据 的类:MyEventArgs---------------------------------------
///定义 EventArgs
/*
定义一个提供事件数据的类。该类必须从 System.EventArgs(它是事件数据的基类)导出。示例如下。
注意 如果已存在事件的事件数据类,或者没有与您的事件关联的数据,则不需要该步骤。如果没有事件数据,请使用基类 System.EventArgs。
以上摘自: ms-help://MS.MSDNQTR.2003FEB.2052/cpguide/html/cpconprovidingeventfunctionality.htm
*/
public class MyEventArgs:System.EventArgs{
private readonly String _name;
public MyEventArgs(String name){
this._name = name;
}
public String name{
get
{
return(this._name);
}
}
}///end class MyEventArgs
//---------------------------end class MyEventArgs---------------------------------------
///声明事件的委托--代理类
/*
注意 如果事件不生成数据,您不需要声明自定义委托。在这种情况下,请使用基事件处理程序 System.ComponentModel.EventHandler。
*/
public delegate void MyEventHandler(object s,MyEventArgs e);
//------------------------------定义 事件 类------------------------------------
/*
1、可将此类看作比较常用的类,如 Button 类。
2、给该类定义 Click 事件,同时定义触发该事件的方法 OnClick
*/
public class MyEvent{
///声明一个事件
///这是事件类必须提供的。
///这是 MyEventHandler 类型的一个委托
public event MyEventHandler Click;
///声明执行事件的方法
public void OnClick(String name){
MyEventArgs Args = new MyEventArgs(name);
if(Click!=null)
Click(this,Args);
}
}///end class MyEvent
//--------------------------------end of class MyEvent----------------------------------
public class erquan{
public static void erquan_Click(object o,MyEventArgs e){
Console.Write("执行该事件的类:"+o.ToString()+" 。"+e.name);
}
public static void Main(){
///可以把 evt 看作是一个 Button 类的实例。
MyEvent evt = new MyEvent();
///把已经定义好的方法加入 evt 的事件链表中。
///这里不要自作聪明的写作 evt.Click = evt.Click + new MyEventHandle(erquan_Click)
///也就是这里的 += 和 字符串连接符的 += 的意义不同!!
evt.Click += new MyEventHandler(erquan_Click);
///执行 带数据的方法。
evt.OnClick("学习 delegate ......");
}
}//end of class erquan
}