.Net C# delegate 委托

在C#中,委托(delegate)类似于指针一样,是指向某个具体的方法的引用类型变量。

一般用来进行 方法级别 解耦,提高灵活性和可扩展性。

声明委托:

        //定义好3个委托
        private delegate string delegateA();
        private delegate string delegateB(string par);
        private delegate int delegateC(int par);

定义好需要通过委托调用的方法:

    /// <summary>
    /// 在类中定义好方法
    /// 在类外部使用委托调用
    /// </summary>
    class delegateClass
    {
        public string GetA()
        {
            return "delegateA--委托返回";
        }

        public string GetB(string par)
        {
            return par;
        }

        public int GetC(int par)
        {
            return par;
        }

    }

实例化委托:

            //实例化目标类
            delegateClass deleClass = new delegateClass();
            //将委托与指定的方法绑定
            delegateA @delegateA = new delegateA(deleClass.GetA);//绑定无参数方法
            delegateB @delegateB = new delegateB(deleClass.GetB);//绑定一个字符类型参数方法
            delegateC @delegateC = new delegateC(deleClass.GetC);//绑定一个整数类型参数方法

调用委托:

            //输出委托调用后返回的结果
            Console.WriteLine(delegateA.Invoke());
            Console.WriteLine(delegateB.Invoke("delegateB--委托返回"));
            Console.WriteLine("delegateC--委托返回--"+delegateC.Invoke(11));

输出结果:

 委托的多播

在 delegateClass 增加两个方法

        public void GetD()
        {
            Console.WriteLine("delegateD--委托返回");
        }
        public void GetE()
        {
            Console.WriteLine("delegateE--委托返回");
        }

使用 新定义的 @delegateE 委托进行多播操作:

            //实例化目标类
            delegateClass deleClass = new delegateClass();
            //将委托与指定的方法绑定
            delegateA @delegateA = new delegateA(deleClass.GetA);//绑定无参数方法
            delegateB @delegateB = new delegateB(deleClass.GetB);//绑定一个字符类型参数方法
            delegateC @delegateC = new delegateC(deleClass.GetC);//绑定一个整数类型参数方法


            //输出委托调用后返回的结果
            Console.WriteLine(delegateA.Invoke());
            Console.WriteLine(delegateB.Invoke("delegateB--委托返回"));
            Console.WriteLine("delegateC--委托返回--"+delegateC.Invoke(11));

            //委托多播
            delegateE @delegateE = deleClass.GetE;//可以直接指定方法实例化委托
            @delegateE += deleClass.GetD;//通过+=符号向委托追加需要多播操作的方法,同理-=可以在列表中删除多播的方法。
            //调用多播委托列表
            delegateE.Invoke();

输出结果:

 委托的多播可以一次调用多个方法,具体的用法根据可以根据项目需要自行设计,微软给出的示例是 用来写日志,同时向多个位置(控制台、文件)输出日志,可以用来参考。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

一个堆栈

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值