前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >委托示例(利用委托对不同类型的对象数组排序)

委托示例(利用委托对不同类型的对象数组排序)

作者头像
菩提树下的杨过
发布2018-01-22 16:47:06
1.7K0
发布2018-01-22 16:47:06
举报
代码语言:javascript
复制
using System;

using System.Collections.Generic;

using System.Text;



namespace delegateTest

{

    /// <summary>

    /// 演示利用委托给不同类型的对象排序

    /// </summary>

    class Program

    {

        delegate bool CompareOp(object lhs,object rhs);//声明委托(注意方法签名的格式是两个object类型参数)



        static void Main(string[] args)

        {

            Employee[] employees = {

                new Employee("Bugs Bunny",20000),

                new Employee("Elmer Fudd",10000),

                new Employee("Daffy Duck",25000),

                new Employee("Wiley Coyote",(decimal)1000000.38),

                new Employee("Foghorn Leghorn",23000),

                new Employee("Road Runner",50000)

            };



            CompareOp c1 = new CompareOp(Employee.CompareEmploySalary);



            BubbleSorter.Sort(employees, c1);//对employees数组,按工资高低排序



            for (int i = 0; i < employees.Length; i++)

            {

                Console.WriteLine(employees[i].ToString());

            }



            Console.WriteLine("---------------------------------------");



            object[] ints = { 3, 5, 2, 8, 6, 0 };



            c1 = new CompareOp(CompareInt);

            BubbleSorter.Sort(ints, c1);//对ints数组,按数值大小排序

            for (int i = 0; i < ints.Length; i++)

            {

                Console.WriteLine(ints[i].ToString());

            }



            Console.WriteLine("---------------------------------------");           



            Console.ReadLine();

        }



        /// <summary>

        /// 比较整数的大小

        /// </summary>

        /// <param name="x">整数1</param>

        /// <param name="y">整数2</param>

        /// <returns>如果第一个数小于第二数,返回true,反之false</returns>

        static bool CompareInt(object x, object y) 

        { 

            return (int)y>(int)x?true:false;

        }



        /// <summary>

        /// 冒泡排序类

        /// </summary>

        class BubbleSorter

        {

            static public void Sort(object[] sortArray, CompareOp gtMethod)

            {

                for (int i = 0; i < sortArray.Length; i++)

                {

                    for (int j = i + 1; j < sortArray.Length; j++)

                    {

                        if (gtMethod(sortArray[j], sortArray[i])) //比较大小,注:不同的object,比较大小的方法不同,比如Employee是按工资高低来比较,int是按数字大小来比较,利用委托的好处就在于不用管具体用哪种方法,具体调用的时候才确定用哪种方法

                        {

                            object temp = sortArray[i];

                            sortArray[i] = sortArray[j];

                            sortArray[j] = temp;

                        }

                    }



                }

            }

        }

    }



    

    /// <summary>

    /// 员工实体类

    /// </summary>

    class Employee 

    {

        private string name;

        private decimal salary;





        /// <summary>

        /// Employee构造函数

        /// </summary>

        /// <param name="name"></param>

        /// <param name="salary"></param>

        public Employee(string name, decimal salary) 

        {

            this.name = name;

            this.salary = salary;

        }



        /// <summary>

        /// 覆盖ToString()方法

        /// </summary>

        /// <returns></returns>

        public override string ToString()

        {

            return string.Format(name + ",{0:c}", salary);

        }



        /// <summary>

        /// 按员工工资高低比较大小

        /// </summary>

        /// <param name="lhs"></param>

        /// <param name="rhs"></param>

        /// <returns></returns>

        public static bool CompareEmploySalary(object lhs, object rhs) 

        {

            Employee empLhs = (Employee)lhs;

            Employee empRhs = (Employee)rhs;

            return (empRhs.salary > empLhs.salary) ? true : false;

        }

    }

}

运行结果:

Elmer Fudd,¥10,000.00

Bugs Bunny,¥20,000.00

Foghorn Leghorn,¥23,000.00

Daffy Duck,¥25,000.00

Road Runner,¥50,000.00

Wiley Coyote,¥1,000,000.38

---------------------------------------

0

2

3

5

6

8

---------------------------------------

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2007-12-13 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档