分分搞懂c#中的委托

分分搞懂c#中的委托;

不说废话,不来虚的概念,不管代码是否有意义,看我的优化之路,你会理解委托了;

源代码1

public class test
    {
        //我们不管代码是否有意义,我们直接看代码重构和一步步优化的过程
        int flage = 1;
        public void show(int a)
        {
            if (flage == 1)
            {
                do1(a);
            }
            else if (flage == 2)
            {
                do2(a);
            }
            else if (flage == 3)
            {
                do3(a);
            }
            else if (flage == 4)
            {
                do4(a);
            }
            else
            {

            }

        }

        public void do1(int val)
        {
        }
        public void do2(int val)
        {

        }
        public void do3(int val)
        {

        }
        public void do4(int val)
        {

        }


    }

 优化一:

public enum flag
    {
        a = 1,
        b = 2,
        c = 3,
        d = 4
    }

    public class test2
    {
public void show(int a, flag f)
        {
            switch (f)
            {
                case flag.a:
                    do1(a);
                    break;
                case flag.b:
                    do2(a);
                    break;
                case flag.c:
                    do3(a);
                    break;
                case flag.d:
                    do4(a);
                    break;
            }
        }

        public void do1(int val)
        {
        }
        public void do2(int val)
        {

        }
        public void do3(int val)
        {

        }
        public void do4(int val)
        {

        }


    }

优化二(委托“现身了”)

public delegate void mydelegate(int val);
    public class test3
    {
        public void show(int a,mydelegate de )
        {
            de(a);
        }

        public void do1(int val)
        {
        }
        public void do2(int val)
        {

        }
        public void do3(int val)
        {

        }
        public void do4(int val)
        {

        }


    }

    class Program
    {
        static void Main(string[] args)
        {
            test3 t = new test3();
            t.show(12,t.do2);
        }
    }
}

哈哈哈,这下明白了撒!(我们将方法名,当成了一个参数来传递滴呀~)

现在我们才来总结概念!

 委托是一个类,它定义了方法的类型,使得可以将方法当作另一个方法的参数来进行传递,这种将方法动态地赋给参数的做法,可以避免在程序中大量使用If-Else(Switch)语句,同时使得程序具有更好的可扩展性。

 

我们也可以将方法绑定到委托上滴呀;

还是直接上代码:

namespace Delegate003
{
    public delegate void myDelegate(string val);
    class Program
    {
        public static void show(string val,myDelegate de)
        {
            de(val);
        }
        public static void do1(string val )
        {
            Console.WriteLine("do1.."+val);
        }

        public static void do2(string val)
        {
            Console.WriteLine("do2..."+val);
        }

        public static void do3(string val)
        {
            Console.WriteLine("do3...'"+val);
        }

        static void Main(string[] args)
        {
            //使用方式一
            myDelegate de1,de2;
            string val="sth";
            de1 = do1;
            de2 = do2;
            show(val, de1);
            show(val, de2);
            Console.ReadLine();
            //使用方式二
            //可以将多个方法赋给同一个委托,或者叫将多个方法绑定到同一个委托,当调用这个委托的时候,将依次调用其所绑定的方法
            myDelegate de;
            string val2="something";
            de = do1;
            de += do2;  //使用-=就是取消绑定
            de += do3;
            show(val2, de);
            Console.ReadLine();

            //使用方式三,绕过我们的show方法,直接调用;
            myDelegate directMy;
            string directVal = "direct";
            directMy = do1;
            directMy(directVal);  //直接通过调用委托来使用滴呀; 

            //使用方式四;
            myDelegate delegate1 = new myDelegate(do1);
            string val4 = "val4";
            delegate1(val4);

            //使用方法五


        }
    }
}

 现在再来看看总结我们的概念滴呀;

使用委托可以将多个方法绑定到同一个委托变量,当调用此变量时(这里用“调用”这个词,是因为此变量代表一个方法),可以依次调用所有绑定的方法。

 

转载于:https://www.cnblogs.com/mc67/p/5068145.html

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值