码迷,mamicode.com
首页 > 其他好文 > 详细

多播委托(from www.sysoft.cc)

时间:2014-10-14 20:44:19      阅读:194      评论:0      收藏:0      [点我收藏+]

标签:http   io   使用   ar   for   sp   div   on   amp   

一个委托类型实列不仅可以绑定一个方法,其实可以实现多个方法的绑定,即多播委托,或委托链。
如下:

namespace 多播委托
{//定义具有反回值无参数的委托类型变量
    public delegate int weito();
    class Program
    {
        static void Main(string[] args)
        {//建立对应委托类型实列,并指定方法,通过增加方式,实现委托多播。
            //委托执行一般按照增加方法的顺序进行。
            weito kk = new weito(M1);
            kk += M2;
            kk += M3;
            kk += M4;
            Console.WriteLine(kk());//具有反回值的多播委托,最终只能返回最后添加方法的返回值。
            Console.WriteLine("------------------遍历取得多播委托方法反回值-----------------");
            Delegate[] delkks = kk.GetInvocationList();
            //可能通过遍历,调用委托中每个方法,实现分步获取委托中的返回值。
            //可以通过.GetInvocationList()方式获得当前委托中存储的所有方法。
            //其反回值类型是一个Delegate[]数组(委托数组)
            //其所有反回的委托均继承自抽像类MultiCastdelegate,而MultiCastdelegage又继承自抽像类Delegate。
            //多播委托内部是将绑定在委托内部的多个方法,强制转换成了一个委托对象,并且将其存储在了一个叫_invocationList的object数组中。
            //当调用委托时,遍历object数组,执行相对应的函数。
            foreach (Delegate itemdelegate in delkks)
            {
                weito method = (weito)itemdelegate;
                int k = method();
                Console.WriteLine(k);
            }
            Console.ReadKey();
        }
        static int M1()
        {
            return 1;
        }
        static int M2()
        {
            return 2;
        }
        static int M3()
        {
            return 3;
        }
        static int M4()
        {
            return 4;
        }
    }



注意:1、当多播委托绑定的方法有出现异常时,则此方法以后的方法不再执行。
            2、委托进行方法增加或去除绑定只能用‘+=’或‘-=‘,如果直接使用‘=’则会将该委托变量绑定的所有方法覆盖掉。
           3、多播委托绑定的第一个方法只能用‘+=‘。
           4、委托同string一样,具有不可变的特性。
多播委托内存分配原理图(delegate k=new delegate(M1);k+=k2;)

bubuko.com,布布扣

多播委托(from www.sysoft.cc)

标签:http   io   使用   ar   for   sp   div   on   amp   

原文地址:http://www.cnblogs.com/sysoft/p/4024816.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!