c#委托 与多播委托delegate +=

来源:互联网 发布:兄弟网络论坛 编辑:程序博客网 时间:2024/05/24 04:26

一 委托

委托又叫匿名函数, 首先我们来说为什么要使用委托 ,委托到底是什么   举一个例子

我想求链表里少于10的数的和,(getSum)

 static int  getSum(List<int> list)
        {
            int sum = 0;
            foreach (var num in list)
            {
                if (num<10)
                {
                    sum += num;


                }
            }
            return sum;
        }


我又想求链表里所有奇数的和,那么是否是又要写一个函数getSum2()来求呢

 static int  getSum2(List<int> list)
        {
            int sum = 0;
            foreach (var num in list)
            {
                if (num%2!=0)
                {
                    sum += num;


                }
            }
            return sum;
        }


到此大家有没有觉得很繁琐   如果要是 将n<10   n%2!=0封装成参数多好,这样就只用写一个函数就通过改变参数就可以实现 求不同元素标准的和了     委托就是为了实现这样一个目的 实现这样的形式

getSum(list<int> list Function function)

 {
            int sum = 0;
            foreach (var num in list)
            {
                if (function(参数))
                {
                    sum += num;


                }
            }
            return sum;
        }


举一个具体的例子


       //定义委托
        delegate bool Function(int i);

      //少于10的函数的委托
        static Function smallerThan10 = delegate (int i) { return i < 10; };

       //求偶数的函数委托
        static Function OuShu=delegate(int i){ return i % 2 != 0; };


        static int  getSum(List<int> list,Function function)
        {
            int sum = 0;
            foreach (var num in list)
            {
                if (function(num))
                {
                    sum += num;


                }
            }
            return sum;
        }


这样求解集合list中小于10的元素的和 就变成下面这样

            var list = new List<int>() { 1, 2, 3, 4, 90 };

          //实现了函数的封装了吧
            int sun=getSum(list,smallerThan10);

     求元素是奇数的和 就变成下面这样

       int sum = getSum(list,OuShu);

     实现了函数的参数封装   太棒啦

二 ,多播委托

action是一个 有参数无返回值的委托类型
        static Action<int> all;
       //i表示参数 
        static Action<int> addPrint = i => { i++; Console.Write(i); };
        static Action<int> print = delegate (int i) { Console.Write(i); };

 在主函数中这样写

          all=addPrint;
            all += print;
            all(1);

打印出 2    1

多播委托就是将多个委托加入一个委托链表

原创粉丝点击