zoukankan      html  css  js  c++  java
  • 新手学委托之委托的应用(二)

    在第一篇《新手学委托之初识委托》中已经说了委托的一些基本知识以及具体举例,这次准备说一下委托的一些具体应用。

    例二:

    委托应用值数据过滤

    namespace 委托应用之数组过滤
    {
        class Program
        {
            static void Main(string[] args)
            {
                List<int> list1 = new List<int>();
                list1.Add(45);
                list1.Add(11);
                list1.Add(300);
                list1.Add(12);
                list1.Add(-5);
               Console.WriteLine("+++++过滤正数+++++");
                List<int> list2 = new List<int>();
    
                foreach (int i in list1)
                {
                    if (i >= 0)
                    {
                        list2.Add(i);
                    }
                }
    
                foreach (int i in list2)
                {
                    Console.WriteLine(i);
                }
                Console.WriteLine("+++++过滤偶数+++++");
                List<int> list3 = new List<int>();
                foreach (int i in list1)
                {
                    if (i % 2 == 0)
                    {
                        list3.Add(i);
                    }
                }
    
                foreach (int i in list3)
                {
                    Console.WriteLine(i);
                }
    } } }

    这是一个很普通的利用泛型集合来进行过滤的方法,那我们用委托该怎么做呢?委托在其中有扮演着什么角色呢?

     1 using System;
     2 using System.Collections.Generic;
     3 using System.Linq;
     4 using System.Text;
     5 
     6 namespace 委托应用之数组过滤
     7 {
     8     //第二步
     9     //声明委托FilterDelerete
    10     delegate bool FilterDelerete(int i);
    11     class Program
    12     {
    13         static void Main(string[] args)
    14         {
    15             //第一步
    16             List<int> list1 = new List<int>();
    17             list1.Add(45);
    18             list1.Add(11);
    19             list1.Add(300);
    20             list1.Add(12);
    21             list1.Add(-5);
    22 
    23             Console.WriteLine("+++++过滤正数+++++");
    24             //第六步
    25             //这里就是实现Filter的地方了,传入一个泛型集合list1和一个方法zhengshu
    26             List<int> newList = Filter(list1, zhengshu);
    27             foreach (int i in newList)
    28             {
    29                 Console.WriteLine(i);
    30             }
    31 
    32             Console.WriteLine("+++++过滤偶数+++++");
    33             //第七步
    34             //假设Filter是牛人写的,普通的开发人员只要写oushu方法就可以了
    35             //不用关心Filter的内部实现,只要指定过滤方法,这就是可以看得见的一大好处
    36             List<int> newlist1= Filter(list1, oushu);
    37             foreach (int i in newlist1)
    38             {
    39                 Console.WriteLine(i);
    40             }
    41             Console.ReadKey();
    42         }
    43 
    44         //第三步
    45         //定义和委托写法差不多的方法,这个是过滤正数的
    46         static bool zhengshu(int i1)
    47         {
    48             return i1 >=0;
    49         }
    50 
    51         //第四步
    52         //这个是过滤偶数的
    53         static bool oushu(int i2)
    54         {
    55             return i2 % 2 == 0;
    56         }
    57 
    58         //第五步
    59         //将过滤正数和偶数的写成一个方法,注意这只是将过滤正数和偶数的抽取出来写成一个方法而已,不要多想
    60         //在这里需要传入委托FilterDelerete的一个对象
    61         //这里怎么要传入FilterDelerete的一个对象呢?
    62         //我们来想想,我们声明的委托是传入 int i,返回的参数是bool,假设我们出入的 f 指向的方法是 zhengshu(),向上数12行,返回的是true的数字不是添加到 list3.Add(i)了吗(向下看)!
    63         static List<int> Filter(List<int> list, FilterDelerete f)
    64         {
    65             List<int> list3 = new List<int>();
    66             foreach (int i in list)
    67             {
    68                 //在这一刻程序员也不知道f到底指向那个函数
    69                 //只知道这个函数是有一个int类型参数,一个bool返回值
    70                 if (f(i))
    71                 {
    72                     list3.Add(i);
    73                 }
    74             }
    75             return list3;
    76         }
    77     }
    78 }

    好了,一个例子看完了,在回想一下,委托在其中扮演着一个什么角色呢?

    例三:

    委托应用之字符串数据处理

    下面这个例子就不再过多的说明的,大家自己理解啊!

     1 using System;
     2 using System.Collections.Generic;
     3 using System.Linq;
     4 using System.Text;
     5 
     6 namespace 委托应用之字符串数据处理
     7 {
     8     delegate string ProcessStringDelegete(string s);
     9     class Program
    10     {
    11         static void Main(string[] args)
    12         {
    13             string[] value = new string[] { "As", "sB" };
    14             //for (int i = 0; i < value.Length;i++ )
    15             //{
    16             //    value[i] = value[i].ToLower();
    17             //}
    18             //for (int i = 0; i < value.Length; i++)
    19             //{
    20             //    value[i] = value[i].ToUpper();
    21             //}
    22             Process(value,ToUpper);
    23             Process(value, FKH);//不用懂for循环可以对字符串数组进行处理
    24             Console.WriteLine(string.Join(",", value));
    25             Console.ReadKey();
    26         }
    27         static void Process(string[] value,ProcessStringDelegete p)
    28         {
    29             for (int i = 0; i < value.Length; i++)
    30             {
    31                 value[i] = p(value[i]);
    32             }
    33         }
    34 
    35         static string FKH(string s1)
    36         {
    37             return "[" + s1 + "]";
    38         }
    39 
    40         static string ToUpper(string s)
    41         {
    42             return s.ToUpper();
    43         }
    44     }
    45 }

     

     

  • 相关阅读:
    InputStream,String相互转化
    HttpGet
    MySQL重复数据
    JS获取地址栏参数的方法
    Java解析采集模块
    按键精灵多机型定时秒杀综合版提交脚本
    按键精灵手机版监控像素变换点击脚本
    按键精灵手机版定时点击脚本
    按键精灵获取系统时间定时点击
    window时间服务器 国内可用
  • 原文地址:https://www.cnblogs.com/zxj159/p/2456055.html
Copyright © 2011-2022 走看看