关于委托一直不能理解; 今天好好看了一下书;却发现有个地方不懂
这是代码
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;namespace 委托实例2sort排序
    //我们要编写一个类BubbleSorter;他执行一个静态方法sort();这个方法的第一个参数是一个对象数组;将该数组进行从新排序;
   {
    //声明委托;委托类型有两个参数  返回bool类型;就是说;它的实例(也就是委托)执行的方法参数有两个
    delegate bool Comparison(object x,object y);    class BubbleSorter
    {
        //这个方法签名 里面有委托类型的参数;传过来的是一个方法
        static public void Sort(object[] sortArray, Comparison comparison)
        {
            //冒泡法
             for(int i=0;i<sortArray.Length;i++)
               {
                  for(int j=i+1;j<sortArray.Length;j++)
                   {
                        if(comparison(sortArray[j],sortArray[i]))//这里就执行委托方法;这里返回的是bool类型的;后面大于前面的就true;
                        {
                            object temp = sortArray[i]; 
                            sortArray[i]=sortArray[j];
                            sortArray[j]=temp;
                        }
                    }
               }        }
    }
    //定义一个类;
    class Employee
    {
        private  string name ;
        private decimal salary;
        public Employee(string name, decimal salary)
        {
            this.name = name;
            this.salary = salary;
        }
        public override string ToString()
        {
            return string.Format("{0},{1}", name, salary);
        }
        //这里返回bool型;
        public static bool CompareSalary(object x, object y)
        {
            Employee e1 = x as Employee;
            Employee e2 = y as Employee;
            return (e1.salary < e2.salary);
        }
    }
    class Program
    {
        static void Main(string[] args)
        {
            //对象数组
            Employee[] employee = 
            {
                new  Employee("shirenchuang",20000),
                new Employee ("hehe" , 1999),
                new Employee("sasd", 3214234) 
            };
            //我想知道这第二个参数怎么可以这样:? 这里要传的不是委托类型的么?还是说传入的方法名只要满足签名就可以?
           
            BubbleSorter.Sort(employee, Employee.CompareSalary);
            foreach (Employee emp in employee)
            {
                Console.WriteLine(emp);
            }
        }
        
    }
}问题在这里
求教!!委托;

解决方案 »

  1.   

    “还是说传入的方法名”
    你重点需要理解“传入的方法名”到底是什么东西
    if 学过c++
     方法名就是函数指针
    else 
     可以把函数理解为对象,和int , object  list<string>一回事,
    函数签名就像list<string> 和list<int> 不能混着用一样。
    随便说点,还要了解更多的话 自己去百度吧。