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
}
posted on 2004-10-13 14:35  erquan  阅读(419)  评论(0编辑  收藏  举报