class Part6_BubbleSorter
    {
        //第二个参数CompareOp报错
        //错误 1 找不到类型或命名空间名称“CompareOp”(是否缺少 using 指令或程序集引用?)
        //D:\My Documents\Visual Studio 2005\Projects\ProfessionalCSharp\ProfessionalCSharp\Part6_BubbleSorter.cs 11 53 ProfessionalCSharp
        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++)
                {
                    object temp = sortArray[i];
                    sortArray[i] = sortArray[j];
                    sortArray[j] = temp;
                }
            }
        }    }
class Part6_Employee
    {
        private string name;
        private decimal salary;        public Part6_Employee(string name, decimal salary)
        {
            this.name = name;
            this.salary = salary;
        }
        public override string ToString()
        {
            
            return string.Format(name + ",{0:C}" ,salary);
        }        //这个方法是干什么的?比较的什么?
        public static bool RhsIsGreater(object lhs,object rhs) 
        {
            Part6_Employee empLhs = (Part6_Employee)lhs;
            Part6_Employee empRhs = (Part6_Employee)rhs;
            return (empRhs.salary > empLhs.salary) ? true : false;
        }    }
class Part6_Main
    {        delegate bool CompareOp(object lhs,object rhs);        public void Main()
        {
            Part6_Employee[] employee ={ new Part6_Employee("name1", 12500), new Part6_Employee("name2", 1654), new Part6_Employee("name3",36794),new Part6_Employee("name4",1200),new Part6_Employee("name5",3421)};
            
            CompareOp employeeCompareOp = new CompareOp(Part6_Employee.RhsIsGreater);//调用RhsIsGreater方法为什么不写参数?            Part6_BubbleSorter.Sort(employee,employeeCompareOp);            for (int i = 0; i < employee.Length; i++)
            {
                Console.WriteLine(employee[i].ToString());
            }
        }
    }
作用是将雇员的工资排序输出,疑惑的地方在代码里面的注释里写着。

解决方案 »

  1.   

    这个例子是Professional C#里面的,看了半天完全糊涂了。
      

  2.   

    CompareOp你是定义在Part6_Main类中的,你在Part6_BubbleSorter类中当然没有了……
      

  3.   

           //这个方法是干什么的?比较的什么?
            public static bool RhsIsGreater(object lhs,object rhs) 
            {
                Part6_Employee empLhs = (Part6_Employee)lhs;
                Part6_Employee empRhs = (Part6_Employee)rhs;
                return (empRhs.salary > empLhs.salary) ? true : false;
            }这个方法是比较工资大小的函数,第一个大于第二个则返回true这个函数在下面的函数中用到(通过gtMethod传到下面的函数中):传入的代码: Part6_BubbleSorter.Sort(employee,employeeCompareOp);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++)
                    {
                        object temp = sortArray[i];
                        sortArray[i] = sortArray[j];
                        sortArray[j] = temp;
                    }
                }
            }
    //在这个sort函数中调用了外面的函数:RhsIsGreater来对数组进行冒泡排序,即:这个sort()函数可以对任何数组排序,只要您实现了数组中两个元素大小的比较(见RhsIsGrater的实现)
      

  4.   

            public static bool RhsIsGreater(object lhs,object rhs) 
            {
                Part6_Employee empLhs = (Part6_Employee)lhs;
                Part6_Employee empRhs = (Part6_Employee)rhs;
                return (empRhs.salary > empLhs.salary) ? true : false;
            }比较工资的吧,
      

  5.   

    我再描述一下问题。
    第一:
    方法static public void Sort(object[] sortArray, CompareOp gtMethod)的第二个参数如何才能不报错?第二:
           public static bool RhsIsGreater(object lhs,object rhs) 
            {
                Part6_Employee empLhs = (Part6_Employee)lhs;
                Part6_Employee empRhs = (Part6_Employee)rhs;
                return (empRhs.salary > empLhs.salary) ? true : false;
            }
    这个方法的两个参数是什么意思?从哪里传来的参数。第三:
    CompareOp employeeCompareOp = new CompareOp(Part6_Employee.RhsIsGreater);//调用RhsIsGreater方法为什么不写参数?第四:
    用委托把 RhsIsGreater(object lhs,object rhs) 方法传递给static public void Sort(object[] sortArray, CompareOp gtMethod)有什么用?具体实现。
      

  6.   

    第一个问题知道了,应该把委托定义在类外面namespace ……
    {
    delegate bool CompareOp(object lhs,object rhs);
    class Part6_Main
        {     }
    }
      

  7.   

    第一,如果Part6_BubbleSorter不是Part6_Main的嵌套类,请你在delegate bool CompareOp(object lhs,object rhs);前加上public,并且修改:static public void Sort(object[] sortArray, Part6_Main
    .
    CompareOp gtMethod)第二,这两个参数就是要比较的两个对象,哪里传来?当然就是你要比较哪两个对象就传哪两个啊第三,委托就是把方法名作为参数进行传递,方法名中当然不能带参数第四,劝你还是好好看看委托的定义再写代码
      

  8.   

       //这个方法是干什么的?比较的什么?
            public static bool RhsIsGreater(object lhs,object rhs) 
            {
                Part6_Employee empLhs = (Part6_Employee)lhs;
                Part6_Employee empRhs = (Part6_Employee)rhs;
                return (empRhs.salary > empLhs.salary) ? true : false;
            }比较两个职员的工资啊
      

  9.   

    第二: 
          public static bool RhsIsGreater(object lhs,object rhs) 
            { 
                Part6_Employee empLhs = (Part6_Employee)lhs; 
                Part6_Employee empRhs = (Part6_Employee)rhs; 
                return (empRhs.salary > empLhs.salary) ? true : false; 
            } 
    这个方法的两个参数是什么意思?从哪里传来的参数。 
    你想比较的那两个呀,!!!
      

  10.   


    class Part6_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 temp = sortArray[i];
                            sortArray[i] = sortArray[j];
                            sortArray[j] = temp;
                         }
                    }
                }
            }    }
    日,终于知道问题出在哪里了!忘了很关键的一句……