关于委托问题

石臻臻的杂货铺
2021年度博客之星TOP 5
博客专家认证
2013-05-15 07:03:19
关于委托一直不能理解; 今天好好看了一下书;却发现有个地方不懂
这是代码
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);
}
}

}
}

问题在这里


求教!!
...全文
112 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
我知道了 我看到书上有这样一句话; 给定委托的实例的方法可以表示任何类型任何对象上的实例方法或静态方法----只要方法的签名匹配于委托的签名即可; 我想这样一句话 就可以说明我的这个问题了吧?
  • 打赏
  • 举报
回复
“还是说传入的方法名” 你重点需要理解“传入的方法名”到底是什么东西 if 学过c++ 方法名就是函数指针 else 可以把函数理解为对象,和int , object list<string>一回事, 函数签名就像list<string> 和list<int> 不能混着用一样。 随便说点,还要了解更多的话 自己去百度吧。

110,566

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧