改变自己
我可以改变世界 改变自己

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace 委托
{
    //声明委托
    public delegate int          AddDeltgate(int x,int y);
    //     关键字   返回值类型   委托名(当类型)   对于方法中的参数
    class Program
    {
        //定义两个静态方法
        public static int mod(int a, int b)
        {
            return a % b;
        }
        public static int mul(int m, int n)
        {
            return m * n;
        }
        //定义一个方法(注意其中的参数)
        public static int account(AddDeltgate action, int x, int y)//此处的参数使用了一个函数(关键点)
        {
            return action(x, y);
        }

        static void Main(string[] args)
        {
            TestDelegate Myadd = new TestDelegate();
            //以前实例化对象,然后用方法实现
            Console.WriteLine(Myadd.Add(2, 9));
            //用委托实现(基本)
            AddDeltgate Myadd2 = Myadd.Add;//注意此处不需要方法Add(),相当于获得方法名Add
            Console.WriteLine(Myadd2(3, 5));

            //用委托实现(高级)
            AddDeltgate myadd3 = new AddDeltgate(Program.mod);//获得方法名(作为传递的方法)
            Console.WriteLine(account(myadd3, 4, 7));//对于在其他类中的方法,需要实例化,则需采用此方法
            Console.WriteLine(account(mod,3,6));//在本类中的方法,直接调用就可以
            Console.WriteLine(account(mul, 3, 6));

            //用匿名方法实现委托

            AddDeltgate myadd4=delegate(int x,int y)

            {

                     return x+x+y+y; 

            };//注意此处的分号

            Console.WriteLine(myadd4(4,5));//18

        }
    }

    class TestDelegate
    {
        public int Add(int s1, int s2)
        {
            return s1 + s2;
        }

    }
}
/*
委托可以看成是一种数据类型,可以用于定义变量,但它是一种特殊的数据类型,它所定义的变量能接受的数值只能是一个函数,
更确切的说,委托的变量接受的数值只能是一个函数,更确切的说,委托的变量可以接收一个函数的地址,类似于C++语言的函数指针

委托在开发中的作用
* 启动线程
* 通用类库
* 事件

委托变量可看成是一种类型安全的函数指针,它只能接收符合其要求的函数引用

*/

posted on 2009-03-19 16:39  dashan  阅读(189)  评论(0编辑  收藏  举报