• 委托


    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
     
    namespace ConsoleApplication2
    {
        delegate int Mydelegetefour<Tdeligate>(Tdeligate x, Tdeligate y);//以前习惯用T来写泛型,其实用其他字符串也行
        class 委托练习2
        {
            public static void Main()
            {
                委托练习2 w = new 委托练习2();
                int y = w.Max(w.arrint);//    一个数组,求最大值 的一般写法
                Console.WriteLine(y);
                person p1 = w.MaxPerson(w.personArr); //一个对象素组 求age的最大值 的一般写法
                Console.WriteLine(p1.Age);
                int x = w.GatMax<int>(w.arrint, w.compare);
                person px = w.GatMax<person>(w.personArr, w.Pcompare);
                /*这里很奇怪,委托是方法的容器,他限制,容纳方法,委托的签名必须满足与方法的签名一致,
                这里用到泛型委托,用泛型加以修饰的委托,也开始抽象画了,明明委托签名写着必须返回int 
                  这里去返回 一个 person类  */
                Console.WriteLine(x);
                Console.WriteLine(px.Age);            
                Console.ReadKey();
            }
            int compare(int x, int y)
            {
                return x < y ? 1 : 0;
            }
            int Pcompare(person p1, person p2)
            {
                return p1.Age < p2.Age ? 1 : 0;
            }
            #region person对象比较最大 age
            person[] personArr = { new person() { Name = "a1", Age = 1 },
                                   new person() { Name = "a2", Age = 12 }, 
                                   new person() { Name = "a3", Age = 2 } };
            person MaxPerson(person[] ArrP)
            {
                person ptemp = ArrP[0];
                for (int j = 1; j < ArrP.Length; j++)
                {
                    if (ptemp.Age < ArrP[j].Age)
                    {
                        ptemp = ArrP[j];
                    }
                }
                return ptemp;
            }
            #endregion
            #region int 比较最大值
            int[] arrint = { 1, 2, 5, 7, 71, 56, 4 };
            int Max(int[] arr)
            {
                int temp = arr[0];//
                for (int i = 1; i < arr.Length; i++)
                {
                    if (temp < arr[i])
                    {
                        temp = arr[i];//临时变量大 则换位
                    }
                }
                return temp;
            }
            #endregion
            Tfan GatMax<Tfan>(Tfan[] TArr, Mydelegetefour<Tfan> M)//这才是关键 把泛型委托作为参数
            {
                Tfan f = TArr[0];
                for (int k = 1; k < TArr.Length; k++)
                {
                    if (M(f, TArr[k]) == 1)
                    {
                        f = TArr[k];
                    }
                }
                return f;
            }
        }
        class person
        {
            #region 姓名
            string name;
            public string Name
            {
                get { return name; }
                set { name = value; }
            }
            #endregion
            #region 年龄
            int age;
            public int Age
            {
                get { return age; }
                set { age = value; }
            }
            #endregion
        }
    }
    
  • 相关阅读:
    C#中跨线程访问控件问题解决方案
    asp.net网站中配置文件的加密
    C#中XML使用总结
    连接加密Access数据库的字符串设置方法
    asp.net中常用的26个优化性能的方法
    C#中Math的使用总结
    关于ASP.NET页面打印技术的总结
    域登录获取用户名字的控制
    Web界面设计基本原则
    域登录获得用户名称
  • 原文地址:https://www.cnblogs.com/bingguang/p/3162325.html
Copyright © 2020-2023  润新知