zoukankan      html  css  js  c++  java
  • 步步为营-24-委托

    委托:将函数作为参数传递 

    例如:操作将一个字符串数组转化为一下大写,小写,转变和打印,普通方法这么写

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    
    namespace Delegate
    {
        class Program
        {
           public static void Main(string[] args)
            {
               //定义字符串
                string[] str = {"Abc","Def","GhIJk"};
    
                MakeChange(str);
                Show(str);
                GetUpper(str);
                Show(str);
                GetLower(str);
                Show(str);
                Console.Read();
            }
    
           public static void GetUpper(string[] strs) 
           {
               for (int i = 0; i < strs.Length; i++)
               {
                   strs[i] = strs[i].ToString().ToUpper();
               } 
           }
    
           public static void GetLower(string[] strs) 
           {
               for (int i = 0; i < strs.Length; i++)
               {
                   strs[i] =  strs[i].ToString().ToLower();
               } 
           }
    
           public static void MakeChange(string[] strs) 
           {
               for (int i = 0; i < strs.Length; i++)
               {
                   strs[i] = "//"+strs[i]+"\\";
               }        
           }
    
           public static void Show(string[] strs) 
           {
               foreach (var item in strs)
               {
                   Console.WriteLine(item);
               }
           }
        }
    }
    普通方法

    这是我们可以使用委托进行改变,我们观察到所有的方法参数和返回值的类型都是一样的.可以声明一个委托

    Delegate string del(string [] strs);

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    
    namespace Delegate
    {
      
        //声明委托
        public delegate string del(string str);
        class Program
        {
           public static void Main(string[] args)
            {
               //定义字符串
                string[] strs = {"Abc","Def","GhIJk"}; 
               //定义委托-法一
                del mc= new del(GetUpper);
                MakeChange(strs , mc);
               //定义委托 -法二
                mc = GetLower;
                MakeChange(strs,mc);
    
                mc = GetChange;
                MakeChange(strs, mc);
               Console.Read();
            }
    
           public static void MakeChange(string[] strs,del Method) 
           {
               for (int i = 0; i < strs.Length; i++)
               {
                strs[i] =  Method(strs[i]);
                Console.WriteLine(strs[i]);
               } 
           }
    
           public static string GetUpper(string strs)
           {
               return strs.ToString().ToUpper();
           }
    
           public static string GetLower(string strs)
           {
               return strs.ToString().ToLower();
           }
    
           public static string GetChange(string strs)
           {
               return "//"+strs.ToString()+"\\";
           }
        }
    }
    委托

    可能会觉得委托并没带来多大简洁,可以通过匿名委托

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    
    namespace Delegate
    {
      
        //声明委托
        public delegate string del(string str);
        class Program
        {
           public static void Main(string[] args)
            {
               //定义字符串
                string[] strs = {"Abc","Def","GhIJk"};
                del getUpper = delegate(string str) { return str.ToUpper(); };
                MakeChange(strs,getUpper);
                del getLower = delegate(string str) { return str.ToLower(); };
                MakeChange(strs, getLower);
                del getChange = delegate(string str) { return "//"+str+"\\"; };
                MakeChange(strs, getChange);
               Console.Read();
            }
    
           public static void MakeChange(string[] strs,del Method) 
           {
               for (int i = 0; i < strs.Length; i++)
               {
                strs[i] =  Method(strs[i]);
                Console.WriteLine(strs[i]);
               } 
           }
    
          
        }
    }
    View Code

    那么通过lmadab表达式呢?

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    
    namespace Delegate
    {
      
        //声明委托
        public delegate string del(string str);
        class Program
        {
           public static void Main(string[] args)
            {
               //定义字符串
                string[] strs = {"Abc","Def","GhIJk"};
                del getUpper = (str) => { return str.ToUpper(); };
                MakeChange(strs,getUpper);
                del getLower = (str) => { return str.ToLower(); };
                MakeChange(strs, getLower);
                del getChange = (str) => { return "\\"+str+"//"; };
                MakeChange(strs, getChange);
               Console.Read();
            }
    
           public static void MakeChange(string[] strs,del Method) 
           {
               for (int i = 0; i < strs.Length; i++)
               {
                strs[i] =  Method(strs[i]);
                Console.WriteLine(strs[i]);
               } 
           }
    
          
        }
    }
    L

    总结
    del getUpper = delegate(string str) { return str.ToUpper(); };

    del getUpper = (str) { return str.ToUpper(); };

  • 相关阅读:
    一键复制文本框内容代码、
    改掉这些坏习惯,你不再是菜鸟
    使用cookie保存页面登录信息
    二维数组转换成一维数组
    jQuery选择器总结
    cookie 和session 的区别详解
    PHP扫雷(转载)。
    PHP简易计算器方法2
    PHP简易计算器方法1
    业务逻辑的存储过程(添加学生的案例)(自动编号)
  • 原文地址:https://www.cnblogs.com/YK2012/p/6729191.html
Copyright © 2011-2022 走看看