C#委托(笔记)

委托:将方法作为参数进行传递的时候,需要利用到委托。

如下实例(笔记):

 class bubble
        {
            /// <summary>
            /// 
            /// </summary>
            /// <typeparam name="T"></typeparam>
            /// <param name="array">IList 接口里面可以传入数组,也可以传入list集合</param>
            /// <param name="com">传入一个委托,委托里面的方法参数有比较的两个类和结果</param>
            public static void Sort<T>(IList<T> array,Func<T,T,bool> com)//排序,从小到大
            {
                bool swpped = true;
                do
                {
                    swpped = false;
                    for (int i = 0; i < array.Count-1; i++)
                    {
                        if (com(array[i+1], array[i]))
                        {
                            //换位
                            T tem = array[i];
                            array[i] = array[i + 1];
                            array[i + 1] = tem;
                            swpped = true;
                        }
                    }
                }
                while (swpped);
            }
        }
        class Employee //员工工资表
        {
            public Employee(string name,decimal money)
            {
                Name = name;
                Money = money;
            }
            public string Name { get; }
            public decimal Money { get; }
            public static bool com(Employee e1, Employee e2)=> e1.Money < e2.Money;
          
        }


        static void Main(string[] args)
        {
            Employee[] em = { new Employee("张三", 12),
             new Employee("李四", 11),
             new Employee("王五", 10),
             new Employee("赵柳", 14),
             new Employee("力气", 24)};
            bubble.Sort(em, Employee.com);
            foreach (var item in em)
            {
                Console.WriteLine(item.Name+","+item.Money);
            }
}

输出结果:

王五,10
李四,11
张三,12
赵柳,14
力气,24
请按任意键继续. . .

这个例子是将两个类里面的字段进行大小比较(工资),然后排序,返回一个结果,因为不能直接用"<"比较类的大小,所以需要另写一个方法进行比较,在排序的时候将此方法传入到排序方法里面,就行了。

排序里面的参数是数组和委托,数组就传入职工类数组,委托就传入比较大小方法。

(想到自己以前有一个类似的比较大小也是不能利用“<”比较,当时是在排序里面直接调用的比较方法,没有将方法进行参数的传递。对此有个疑问,为啥一定要将方法传递呢。)

根据以上的疑问,对代码有进行了修改。修改之后发现,修改后的方法只能对一个类进行排序。如果其他类也需要排序就需要写一个新的排序方法。

猜你喜欢

转载自blog.csdn.net/weixin_40068689/article/details/82021399