C#中的委托和事件

    技术2022-05-11  119

    一、委托

    1、定义一个委托, 相当于public string ss;

    public delegate void MyDelegate(string name );                

    2、定义委托具体执行的事件,必须和上面的委托的参数和返回类型都一样,也就是与void MyDelegate(string name )的形式相同。

    public static void MyDelegateFunc( string name )

    {

            Console.WriteLine("Hello,{0}", name);

    }

    3、具体调用事件

    MyDelegate md = new MyDelegate ( MyDelegateFunc); //类似于String ss = new String("ee");只不过,这边是用函数的名称而已

    md("sss");//具体调用方法,相当于调用MyDelegateFunc("sss");现在MyDelegateFunc和md就是相同的了。

    二、事件

     1、定义一个委托,和上面的委托类似,但是必须是void MyEventHandle(object sender , System.EventArgs e ); 类似这种形式的。  

    public delegate void MyEventHandle(object sender , System.EventArgs e );            

    public delegate void MyEventHandle(object sender , MyEventArgs e );//         MyEventArgs 是   System.EventArgs的子类

    2、定义一个事件变量

    public event myEventHanler myevent;      //比MyDelegate md多了一个event关键字,表示这是一个事件变量

    3、定义事件参数,以第一种为例。

    public void MyEventFunc(object sender , System.EventArgs e)

    {

    Console.WriteLine("My event is OK!");

    }

    4、用+=注册事件到事件队列中,相当于MyDelegate md = new MyDelegate ( MyDelegateFunc); 用+=替代=

    this.myevent += new myEventHanler(MyEventFunc);

    5、调用,相当于md("sss");

    if ( mevent != null )

    {

           myevent( this , EventArgs.Empty);//EventArgs.Empty是表示不用e

    }

    三、传具体参数的事件

    1、定义一个委托,和上面的委托类似。

    public delegate void MyEventHandle(object sender , MyEventArgs e );//         MyEventArgs 是具体的参数

    2、定义一个事件

    public event myEventHanler myevent; 

    3、定义具体的事件变量

    public void MyEventFunc(object sender , MyEventArgs  e)

    {

    Console.WriteLine("My event is {0}",e.Name);

    }

    4、注册,同上

    this.myevent += new myEventHanler(MyEventFunc);

    5、定义MyEventArgs 

      public class MyEventArgs : System.EventArgs  {   private string _name;

       public string Name   {    get    {     return _name;    }   }

       public MyEventArgs(string name)   {    _name = name;   }  }

    6、调用

    if ( mevent != null )

    {

           myevent( this , new MyEventArgs("dsfs") );

    }


    最新回复(0)