C#之委托

委托,第一次接触的时候觉得好难,果断跳过,真是躲得过初一躲不过十五,现在还是得学。

委托,顾名思义,应该就是“为了方便,把一些事情委托给别人去做”,最近看了《医馆笑传》,所以就拿它举个例子吧,同舟会为了推翻大明朝,所以就委托了许多杀手去谋害皇帝,委托了宫女在御用的冰块上投毒来杀害皇帝,也委托了万贞儿(万妃)统领后宫来杀害所有的皇子,继而毁掉龙脉等等,可以说,委托嘛有一种“借刀杀人”的意思,在C#里同样也有这种意思,“借多把刀杀多个人”。

1、普通方式

有一个int类型的List,我想知道里面大于0的有哪些,是偶数的又有哪些,所以就有了如下代码

 List<int> list = new List<int>();
            list.Add(1);
            list.Add(-1);
            list.Add(2);
            list.Add(-2);
            list.Add(3);
            list.Add(4);
            list.Add(5);

            List<int> list1 = new List<int>();
            foreach (var item in list)
            {
                if (item > 0)
                    list1.Add(item);
            }

            List<int> list2 = new List<int>();
            foreach (var item in list)
            {
                if (item % 2 == 0)
                    list2.Add(item);
            }

            foreach (var item in list1)
            {
                Console.WriteLine(item);
            }
            Console.WriteLine("---------------------------");
            foreach (var item in list2)
            {
                Console.WriteLine(item);
            }
            Console.ReadLine();

2、委托方式

如果我想知道奇数是哪些?1到10之间的有哪些,不能每次有一个想法,就都得写一个循环然后判断一下吧,所以就想到了委托(借多把刀杀多个人),so。。。

 class Program
    {
        static void Main(string[] args)
        {            
            List<int> list = new List<int>();
            list.Add(1);
            list.Add(-1);
            list.Add(2);
            list.Add(-2);
            list.Add(3);
            list.Add(4);
            list.Add(5);
         
            foreach (var item in GetList(list, GetZheng))
            {
                Console.WriteLine(item);
            }
            Console.WriteLine("---------------------------");
            foreach (var item in GetList(list, GetOu))
            {
                Console.WriteLine(item);
            }
            Console.ReadLine();
        }

        static List<int> GetList(List<int> list, FilterDelegate fd)
        {
            List<int> list3 = new List<int>();
            foreach (var item in list)
            {
                if (fd(item))
                    list3.Add(item);
            }
            return list3;
        }
        //得到正整数
        static bool GetZheng(int i)
{
return i > 0;
}

//得到偶数
static bool GetOu(int i) { return i % 2 == 0; } }
delegate bool FilterDelegate(int i);

轻而易举的就解决了问题,

委托就是把要实现的功能(一个方法)交给别人(声明的委托)去做。

posted on 2017-01-07 15:02  奔游浪子  阅读(104)  评论(0)    收藏  举报

导航