• C# 委托2


    委托的定义:

        (1) 将方法作为变量使用的一种机制,就是将方法当作变量用(声明,赋值,传参)

          (2) 将变量当作方法来用,首先就要去声明变量,就要考虑变量的类型,就是(委托变量,对应方法的返回值,参数等),顾名思义:委托就是委托别人去干某些事情,下面是一个实例方法的实现 例如:我现在饿了,但是我很懒,就是不想出去买,所以这时候我可以委托室友帮我带一份,这样我就已经实现委托了

        

     class Program
        {
            //声明一个委托
            delegate int DelegateCompare(object o1, object o2);
    
            delegate int DelegateTotal(int num1, int num2);
    
            static void Main(string[] args)
            {
    
                //比较两个整数
                DelegateCompare del = intCompare;  //简写
                Console.WriteLine(del(1, 2));
    
                //比较两个字符的长度
                del = new DelegateCompare(strLengthCompare); //完整写法
                Console.WriteLine(del("123456", "admin"));
    
                del = PersonAgeCompare;  //简写
                Console.WriteLine(del(new Person("张三", 18), new Person("李四", 20)));
    
                /*-------------取最大值-----------*/
                DelegateCompare delMax;
    
                delMax = intCompare; //整数
                Console.WriteLine(GetMax(new object[] { 1, 5, 3, 6, 8, 7 }, delMax));
    
                delMax = strLengthCompare; //字符串长度
                Console.WriteLine(GetMax(new object[] { "aa", "a", "aaa", "aaaa", "aaaaaaaa", "a" }, delMax));
    
                delMax = PersonAgeCompare;  //Person类的Age属性
                Console.WriteLine(((Person)GetMax(new object[] { new Person("张三", 18), new Person("李四", 14), new Person("万物", 20) }, delMax)).Name);
    
                /*----------匿名委托----------*/
    
                //标准写法
                DelegateCompare del2 = delegate(object o1, object o2) { return (int)o1 - (int)o2; };
                Console.WriteLine("匿名委托" + del2(5, 3));
                //lambda 表达式
                DelegateCompare del3 = (object o1, object o2) => (int)o1 - (int)o2;   //del3 同等于Del4
                DelegateCompare del4 = (object o1, object o2) => { return (int)o1 - (int)o2; };
    
                /*--------系统委托-----------*/
    
                //lambda 表达式
                string[] names = { "agen", "balen", "coure", "apple" };
                string[] findNameA = Array.FindAll<string>(names, delegate(string v) { return v.StartsWith("a"); });
                string[] findNameB = Array.FindAll<string>(names, v => v.StartsWith("a"));
                Console.WriteLine(string.Join("-", findNameA));
                Console.WriteLine(string.Join("-", findNameB));
    
           //泛型集合Int转String数组
    List<int> intList = new List<int>() { 1, 23, 4, 5, 56, 6, 6, 76, 7, 7 };
    string[] str_array = intList.ConvertAll<string>((int i) => i.ToString()).ToArray(); 
    /*----------------多播委托----------*/ //多播委托一般情况下 要求没有返回值, 若有, 则返回最后一个方法的返回值 DelegateTotal delTotal = He; delTotal += Cha; delTotal += Ji; Console.WriteLine(delTotal(2, 4)); Console.ReadKey(); } /// <summary> /// 获取array最大值 /// </summary> /// <param name="arr"></param> /// <param name="del"></param> /// <returns></returns> static object GetMax(object[] arr, DelegateCompare del) { if (arr.Length > 1) { object _max = arr[0]; for (int i = 1; i < arr.Length; i++) { if (del(_max, arr[i]) < 0) { _max = arr[i]; } } return _max; } return null; } /// <summary> /// 比较两个Person类的Age属性 大于0 o1大 等于0 相等 小于0 o2大 /// </summary> /// <param name="o1"></param> /// <param name="o2"></param> /// <returns></returns> static int PersonAgeCompare(object o1, object o2) { return ((Person)o1).Age - ((Person)o2).Age; } /// <summary> /// 比较两个字符串的长度 大于0 o1大 等于0 相等 小于0 o2大 /// </summary> /// <param name="o1"></param> /// <param name="o2"></param> /// <returns></returns> static int strLengthCompare(object o1, object o2) { return o1.ToString().Length - o2.ToString().Length; } /// <summary> /// 比较两个数的大小 大于0 o1大 等于0 相等 小于0 o2大 /// </summary> /// <param name="o1"></param> /// <param name="o2"></param> /// <returns></returns> static int intCompare(object o1, object o2) { return (int)o1 - (int)o2; } /// <summary> /// 求和 /// </summary> /// <param name="num1"></param> /// <param name="num2"></param> /// <returns></returns> static int He(int num1, int num2) { Console.WriteLine("----求和----"); return num1 + num2; } /// <summary> /// 求差 /// </summary> /// <param name="num1"></param> /// <param name="num2"></param> /// <returns></returns> static int Cha(int num1, int num2) { Console.WriteLine("----求差----"); return num1 - num2; } /// <summary> /// 求积 /// </summary> /// <param name="num1"></param> /// <param name="num2"></param> /// <returns></returns> static int Ji(int num1, int num2) { Console.WriteLine("----求积----"); return num1 * num2; } } //定义一个Person类 class Person { //姓名 private string name = ""; //年龄 private int age = 0; //构造方法 public Person(string PName, int PAge) { this.Name = PName; this.Age = PAge; } public int Age { get { return age; } set { age = value; } } public string Name { get { return name; } set { name = value; } } }
  • 相关阅读:
    606. Construct String from Binary Tree 【easy】
    520. Detect Capital【easy】
    28. Implement strStr()【easy】
    521. Longest Uncommon Subsequence I【easy】
    线程,进程,任务
    nginx for windows中的一项缺陷
    nginx在windwos中的使用
    关于wxwidgets图形界面的关闭窗口的按钮无效的解决办法
    进程与线程之间的资源的关系
    关于函数可重入需要满足的条件
  • 原文地址:https://www.cnblogs.com/mingxuantongxue/p/3717866.html
Copyright © 2020-2023  润新知