黑马程序员 委托

------- Windows Phone 7手机开发.Net培训、期待与您交流! -------

委托也叫代理,相当于把事情交代给别人去办,如委托别人帮你办理什么东西。

C#中如果一个方法委托给一个对象,这个对象就全权代理这个方法的执行。、

建立一个委托:定义一个委托和定义个方法类似。

<访问修饰符> delegate 返回类型 委托名();

定义好一个委托后,委托是没有具体的实现对象,要用委托还必须实例化委托。

委托名 实例委托名 = new 委托名(类名.方法名);

示例:

//定义方法SortArray用于按照顺序排序
        public static void SortArray(int[] array) {
            int a;
            bool bl = false;
            for (int i = 0; i < array.Length; i++, bl = false)
            {
                for (int j = 0; j < array.Length - 1; j++)
                {
                    if (array[j] > array[j + 1])
                    {
                        a = array[j];
                        array[j] = array[j + 1];
                        array[j + 1] = a;
                        bl = true;
                    }
                }
                if (bl == false) {
                    break;
                }
            }
        }
        public delegate void SortDelegate(int[] array);//创建一个委托
        static void Main(string[] args)
        {
            Console.WriteLine("排序前的数组");
            int[] arrayints = { 1, 3, 8, 4, 2 };
            foreach (int i in arrayints)
            {
                Console.Write(i.ToString() + "、");
            }

            SortDelegate myDelegate = new SortDelegate(SortArray);//实例化委托
            myDelegate(arrayints);//传递参数,调用委托
            Console.WriteLine("\n排序后的数组");
            foreach (int i in arrayints)
            {
                Console.Write(i.ToString() + "、");
            }
            Console.ReadLine();
        }

多点委托:前面提到的委托都只包含对一个方法的调用,如果需要调用多个方法,需要多次显示的调用这个委托,我们还有另的选择,我们可以让一个委托中包含多个方法,这样我们一次显示调用委托,就可以按照顺序连续的调用多个方法。看下面的例子:


        public static void SortArray(int[] array) {
            int a;
            bool bl = false;
            for (int i = 0; i < array.Length; i++, bl = false)
            {
                for (int j = 0; j < array.Length - 1; j++)
                {
                    if (array[j] > array[j + 1])
                    {
                        a = array[j];
                        array[j] = array[j + 1];
                        array[j + 1] = a;
                        bl = true;
                    }
                }
                if (bl == false) {
                    break;
                }
            }
        }
        public static void SayDelegate(int[] array) {
            Console.WriteLine("\n排序后的数组");
            foreach (int i in array)
            {
                Console.Write(i.ToString() + "、");
            }
        }
        public delegate void SortDelegate(int[] array);//创建一个委托
        static void Main(string[] args)
        {
            Console.WriteLine("排序前的数组");
            int[] arrayints = { 1, 3, 8, 4, 2 };
            foreach (int i in arrayints)
            {
                Console.Write(i.ToString() + "、");
            }

            SortDelegate myDelegate = new SortDelegate(SortArray);//实例化委托
            myDelegate += new SortDelegate(SayDelegate);
            myDelegate(arrayints);//传递参数,调用委托
            Console.ReadLine();
        }

输出的结果与第一个是一样的。

可以看到我们一次显示的调用一个委托,它顺序的(按照你添加方法的顺序)执行了方法SortArray和SayDelegate。这里要注意的有几点: 

  •  委托支持 +=,-=这样的运算符,对应为添加或去掉一个方法
  •  多点委托不可以定义有返回值,因为无法处理多个方法的返回值,所以如果要使用多点委托,应该用void,否则你的编译会返回一个错误
  •  多点委托不建议你的参数列表中有OUT的类型,这样只会out最后一个方法的值,其他的值会丢失。
  • 多点委托处理多个方法时,这些方法是否有传递参数,参数的类型和数量都要一致,否则会报错。

------- Windows Phone 7手机开发.Net培训、期待与您交流! -------

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值