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

时间:2022-09-03 15:15:41
  1 委托示例(利用委托对不同类型的对象数组排序)using  System;
  2 委托示例(利用委托对不同类型的对象数组排序) using  System.Collections.Generic;
  3 委托示例(利用委托对不同类型的对象数组排序) using  System.Text;
  4 委托示例(利用委托对不同类型的对象数组排序)
  5 委托示例(利用委托对不同类型的对象数组排序) namespace  delegateTest
  6 委托示例(利用委托对不同类型的对象数组排序)委托示例(利用委托对不同类型的对象数组排序) {
  7委托示例(利用委托对不同类型的对象数组排序)委托示例(利用委托对不同类型的对象数组排序)    /// <summary>
  8委托示例(利用委托对不同类型的对象数组排序)    /// 演示利用委托给不同类型的对象排序
  9委托示例(利用委托对不同类型的对象数组排序)    /// </summary>

 10委托示例(利用委托对不同类型的对象数组排序)    class Program
 11委托示例(利用委托对不同类型的对象数组排序)委托示例(利用委托对不同类型的对象数组排序)    {
 12委托示例(利用委托对不同类型的对象数组排序)        delegate bool CompareOp(object lhs,object rhs);//声明委托(注意方法签名的格式是两个object类型参数)
 13委托示例(利用委托对不同类型的对象数组排序)
 14委托示例(利用委托对不同类型的对象数组排序)        static void Main(string[] args)
 15委托示例(利用委托对不同类型的对象数组排序)委托示例(利用委托对不同类型的对象数组排序)        {
 16委托示例(利用委托对不同类型的对象数组排序)委托示例(利用委托对不同类型的对象数组排序)            Employee[] employees = {
 17委托示例(利用委托对不同类型的对象数组排序)                new Employee("Bugs Bunny",20000),
 18委托示例(利用委托对不同类型的对象数组排序)                new Employee("Elmer Fudd",10000),
 19委托示例(利用委托对不同类型的对象数组排序)                new Employee("Daffy Duck",25000),
 20委托示例(利用委托对不同类型的对象数组排序)                new Employee("Wiley Coyote",(decimal)1000000.38),
 21委托示例(利用委托对不同类型的对象数组排序)                new Employee("Foghorn Leghorn",23000),
 22委托示例(利用委托对不同类型的对象数组排序)                new Employee("Road Runner",50000)
 23委托示例(利用委托对不同类型的对象数组排序)            }
;
 24委托示例(利用委托对不同类型的对象数组排序)
 25委托示例(利用委托对不同类型的对象数组排序)            CompareOp c1 = new CompareOp(Employee.CompareEmploySalary);
 26委托示例(利用委托对不同类型的对象数组排序)
 27委托示例(利用委托对不同类型的对象数组排序)            BubbleSorter.Sort(employees, c1);//对employees数组,按工资高低排序
 28委托示例(利用委托对不同类型的对象数组排序)
 29委托示例(利用委托对不同类型的对象数组排序)            for (int i = 0; i < employees.Length; i++)
 30委托示例(利用委托对不同类型的对象数组排序)委托示例(利用委托对不同类型的对象数组排序)            {
 31委托示例(利用委托对不同类型的对象数组排序)                Console.WriteLine(employees[i].ToString());
 32委托示例(利用委托对不同类型的对象数组排序)            }

 33委托示例(利用委托对不同类型的对象数组排序)
 34委托示例(利用委托对不同类型的对象数组排序)            Console.WriteLine("---------------------------------------");
 35委托示例(利用委托对不同类型的对象数组排序)
 36委托示例(利用委托对不同类型的对象数组排序)委托示例(利用委托对不同类型的对象数组排序)            object[] ints = 352860 };
 37委托示例(利用委托对不同类型的对象数组排序)
 38委托示例(利用委托对不同类型的对象数组排序)            c1 = new CompareOp(CompareInt);
 39委托示例(利用委托对不同类型的对象数组排序)            BubbleSorter.Sort(ints, c1);//对ints数组,按数值大小排序
 40委托示例(利用委托对不同类型的对象数组排序)            for (int i = 0; i < ints.Length; i++)
 41委托示例(利用委托对不同类型的对象数组排序)委托示例(利用委托对不同类型的对象数组排序)            {
 42委托示例(利用委托对不同类型的对象数组排序)                Console.WriteLine(ints[i].ToString());
 43委托示例(利用委托对不同类型的对象数组排序)            }

 44委托示例(利用委托对不同类型的对象数组排序)
 45委托示例(利用委托对不同类型的对象数组排序)            Console.WriteLine("---------------------------------------");           
 46委托示例(利用委托对不同类型的对象数组排序)
 47委托示例(利用委托对不同类型的对象数组排序)            Console.ReadLine();
 48委托示例(利用委托对不同类型的对象数组排序)        }

 49委托示例(利用委托对不同类型的对象数组排序)
 50委托示例(利用委托对不同类型的对象数组排序)委托示例(利用委托对不同类型的对象数组排序)        /// <summary>
 51委托示例(利用委托对不同类型的对象数组排序)        /// 比较整数的大小
 52委托示例(利用委托对不同类型的对象数组排序)        /// </summary>
 53委托示例(利用委托对不同类型的对象数组排序)        /// <param name="x">整数1</param>
 54委托示例(利用委托对不同类型的对象数组排序)        /// <param name="y">整数2</param>
 55委托示例(利用委托对不同类型的对象数组排序)        /// <returns>如果第一个数小于第二数,返回true,反之false</returns>

 56委托示例(利用委托对不同类型的对象数组排序)        static bool CompareInt(object x, object y) 
 57委托示例(利用委托对不同类型的对象数组排序)委托示例(利用委托对不同类型的对象数组排序)        
 58委托示例(利用委托对不同类型的对象数组排序)            return (int)y>(int)x?true:false;
 59委托示例(利用委托对不同类型的对象数组排序)        }

 60委托示例(利用委托对不同类型的对象数组排序)
 61委托示例(利用委托对不同类型的对象数组排序)委托示例(利用委托对不同类型的对象数组排序)        /// <summary>
 62委托示例(利用委托对不同类型的对象数组排序)        /// 冒泡排序类
 63委托示例(利用委托对不同类型的对象数组排序)        /// </summary>

 64委托示例(利用委托对不同类型的对象数组排序)        class BubbleSorter
 65委托示例(利用委托对不同类型的对象数组排序)委托示例(利用委托对不同类型的对象数组排序)        {
 66委托示例(利用委托对不同类型的对象数组排序)            static public void Sort(object[] sortArray, CompareOp gtMethod)
 67委托示例(利用委托对不同类型的对象数组排序)委托示例(利用委托对不同类型的对象数组排序)            {
 68委托示例(利用委托对不同类型的对象数组排序)                for (int i = 0; i < sortArray.Length; i++)
 69委托示例(利用委托对不同类型的对象数组排序)委托示例(利用委托对不同类型的对象数组排序)                {
 70委托示例(利用委托对不同类型的对象数组排序)                    for (int j = i + 1; j < sortArray.Length; j++)
 71委托示例(利用委托对不同类型的对象数组排序)委托示例(利用委托对不同类型的对象数组排序)                    {
 72委托示例(利用委托对不同类型的对象数组排序)                        if (gtMethod(sortArray[j], sortArray[i])) //比较大小,注:不同的object,比较大小的方法不同,比如Employee是按工资高低来比较,int是按数字大小来比较,利用委托的好处就在于不用管具体用哪种方法,具体调用的时候才确定用哪种方法
 73委托示例(利用委托对不同类型的对象数组排序)委托示例(利用委托对不同类型的对象数组排序)                        {
 74委托示例(利用委托对不同类型的对象数组排序)                            object temp = sortArray[i];
 75委托示例(利用委托对不同类型的对象数组排序)                            sortArray[i] = sortArray[j];
 76委托示例(利用委托对不同类型的对象数组排序)                            sortArray[j] = temp;
 77委托示例(利用委托对不同类型的对象数组排序)                        }

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

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

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

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

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

 84委托示例(利用委托对不同类型的对象数组排序)
 85委托示例(利用委托对不同类型的对象数组排序)    
 86委托示例(利用委托对不同类型的对象数组排序)委托示例(利用委托对不同类型的对象数组排序)    /// <summary>
 87委托示例(利用委托对不同类型的对象数组排序)    /// 员工实体类
 88委托示例(利用委托对不同类型的对象数组排序)    /// </summary>

 89委托示例(利用委托对不同类型的对象数组排序)    class Employee 
 90委托示例(利用委托对不同类型的对象数组排序)委托示例(利用委托对不同类型的对象数组排序)    {
 91委托示例(利用委托对不同类型的对象数组排序)        private string name;
 92委托示例(利用委托对不同类型的对象数组排序)        private decimal salary;
 93委托示例(利用委托对不同类型的对象数组排序)
 94委托示例(利用委托对不同类型的对象数组排序)
 95委托示例(利用委托对不同类型的对象数组排序)委托示例(利用委托对不同类型的对象数组排序)        /// <summary>
 96委托示例(利用委托对不同类型的对象数组排序)        /// Employee构造函数
 97委托示例(利用委托对不同类型的对象数组排序)        /// </summary>
 98委托示例(利用委托对不同类型的对象数组排序)        /// <param name="name"></param>
 99委托示例(利用委托对不同类型的对象数组排序)        /// <param name="salary"></param>

100委托示例(利用委托对不同类型的对象数组排序)        public Employee(string name, decimal salary) 
101委托示例(利用委托对不同类型的对象数组排序)委托示例(利用委托对不同类型的对象数组排序)        {
102委托示例(利用委托对不同类型的对象数组排序)            this.name = name;
103委托示例(利用委托对不同类型的对象数组排序)            this.salary = salary;
104委托示例(利用委托对不同类型的对象数组排序)        }

105委托示例(利用委托对不同类型的对象数组排序)
106委托示例(利用委托对不同类型的对象数组排序)委托示例(利用委托对不同类型的对象数组排序)        /// <summary>
107委托示例(利用委托对不同类型的对象数组排序)        /// 覆盖ToString()方法
108委托示例(利用委托对不同类型的对象数组排序)        /// </summary>
109委托示例(利用委托对不同类型的对象数组排序)        /// <returns></returns>

110委托示例(利用委托对不同类型的对象数组排序)        public override string ToString()
111委托示例(利用委托对不同类型的对象数组排序)委托示例(利用委托对不同类型的对象数组排序)        {
112委托示例(利用委托对不同类型的对象数组排序)            return string.Format(name + ",{0:c}", salary);
113委托示例(利用委托对不同类型的对象数组排序)        }

114委托示例(利用委托对不同类型的对象数组排序)
115委托示例(利用委托对不同类型的对象数组排序)委托示例(利用委托对不同类型的对象数组排序)        /// <summary>
116委托示例(利用委托对不同类型的对象数组排序)        /// 按员工工资高低比较大小
117委托示例(利用委托对不同类型的对象数组排序)        /// </summary>
118委托示例(利用委托对不同类型的对象数组排序)        /// <param name="lhs"></param>
119委托示例(利用委托对不同类型的对象数组排序)        /// <param name="rhs"></param>
120委托示例(利用委托对不同类型的对象数组排序)        /// <returns></returns>

121委托示例(利用委托对不同类型的对象数组排序)        public static bool CompareEmploySalary(object lhs, object rhs) 
122委托示例(利用委托对不同类型的对象数组排序)委托示例(利用委托对不同类型的对象数组排序)        {
123委托示例(利用委托对不同类型的对象数组排序)            Employee empLhs = (Employee)lhs;
124委托示例(利用委托对不同类型的对象数组排序)            Employee empRhs = (Employee)rhs;
125委托示例(利用委托对不同类型的对象数组排序)            return (empRhs.salary > empLhs.salary) ? true : false;
126委托示例(利用委托对不同类型的对象数组排序)        }

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

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

129 委托示例(利用委托对不同类型的对象数组排序)
运行结果:
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
---------------------------------------