现在的位置: 首页 > 综合 > 正文

委托的用法

2013年12月08日 ⁄ 综合 ⁄ 共 2183字 ⁄ 字号 评论关闭

委托的主要作用是可以方便选择用哪个方法 ,主要用在事件里较多

using System;
using System.Collections.Generic;
using System.Text;
//函数作用:委托的用法
namespace ConsoleApplication21
{
    class Program
    {
        delegate double testDelegate(double x, double y);//创建委托,并且返回值为double

        static double Multiply(double x, double y) //创建函数
        {
            return x * y;
        }

        static double Divide(double x, double y)
        {
            return x / y;
        }

        static void Main(string[] args)
        {
            testDelegate selectAction; //声明
            Console.WriteLine("请输入2个数字!用“,”隔开");
            string getnum = Console.ReadLine();
            int zz = getnum.IndexOf(',');
            double num1 = Convert.ToDouble(getnum.Substring(0,zz));
            double num2 = Convert.ToDouble(getnum.Substring(zz + 1, getnum.Length - zz - 1));
            Console.WriteLine("请选择操作,m or d ");
            string act = Console.ReadLine().ToLower();
            if (act == "m")//这里根据选择初始化委托变量
            { selectAction = new testDelegate(Multiply); }//这里即选择哪个函数执行委托
            else
            { selectAction = new testDelegate(Divide); }
            Console.WriteLine("运算结果:{0}", selectAction(num1,num2));//让委托调用所选函数,并执行
        }
    }
}

一、委托

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

}

抱歉!评论已关闭.