• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

C#委托,委托链,多播委托

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

委托


概念:委托是一种用户自定义的类型.是一种类.可以把委托看成用来执行方法/函数的一个东西
形式:delegate 函数返回类型 委托名称({可有/可无}参数部分)
实例化:委托类型 实例化名=new 委托类型(方法名称)

代码实现:

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

namespace ConsoleApp1
{
    //父亲委托
    public delegate void delFather(string hand);
    //母亲委托
    public delegate void delMother();
    class Program
    {
        static void Main(string[] args)
        {
            A a = new A();
            B b = new B(a);
            a.Raise("左");
            Console.ReadKey();
        }
    }

    //父母
    class A
    {
        //父亲事件
        public event delFather eventFather;
        //母亲事件
        public event delMother eventMother;

        //方法
        public void fatherCall(string child)
        {
            Console.WriteLine("父亲呼叫孩子", child);
            //调用事件了
            if (eventFather != null)
            {
                eventFather(child);
            }
        }

        //方法
        public void motherCall()
        {
            Console.WriteLine("母亲呼叫孩子");
            //调用事件了
            if (eventMother != null)
            {
                eventMother();
            }
        }
    }

    //孩子B
    class B
    {
        A a;
        public B(A a)
        {
            this.a = a;
            a.eventFather += new delFather(a_Father);
            a.eventMother += new delMother(a_Mother);
        }
        void a_Father(string hand)
        {
            if (hand.Equals("左"))
            {
                Dao();
            }
        }
        void a_Mother()
        {
            Dao();
        }
        public void Dao()
        {
            Console.WriteLine("我来了");
        }
    }
}

多播委托

  多播委托即对同一个委托进行多次+=订阅,但每次执行的结果都会被下次的执行结果所覆盖,最后得到的结果即订阅最后一个方法的值

*多播委托是先创建一个委托实例,在这个实例上进行订阅*

代码实现:

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

namespace 多播委托
{


    class Program
    {
        public delegate int Add(out int x);
        static void Main(string[] args)
        {
            Add a = new Add(One);
            a += new Add(Two);
            int x;
            int y = a(out x);
            Console.WriteLine(y);
            Console.ReadKey();
        }
        public static int One(out int x)
        {
            return x = 1;
        }
        public static int Two(out int x)
        {
            return x = 2;
        }
    }
}

 

委托链

  委托链形式类似于多播委托

*委托链是创建多个委托实例,每个实例与每个实例之间进行订阅*

namespace 委托链
{
    class Program
    {
        public delegate void Chain();
        static void Main(string[] args)
        {
            Chain c = new Chain(Method1);
            Chain c1 = new Chain(Method2);
            Chain c2 = null;

            //委托链中 添加委托
            //使用+=  
            c2 += c;
            c2 += c1;

            //委托链中 移除委托
            c2 -= c;

            c2();
            Console.ReadKey();
        }
        static void Method1()
        {
            Console.WriteLine("method1");
        }
        static void Method2()
        {
            Console.WriteLine("method2");
        }
    }
}

 


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
C#解析XML发布时间:2022-07-14
下一篇:
c#switchcase语句发布时间:2022-07-14
热门推荐
热门话题
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap