委托:将方法作为参数进行传递的时候,需要利用到委托。
如下实例(笔记):
class bubble
{
/// <summary>
///
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="array">IList 接口里面可以传入数组,也可以传入list集合</param>
/// <param name="com">传入一个委托,委托里面的方法参数有比较的两个类和结果</param>
public static void Sort<T>(IList<T> array,Func<T,T,bool> com)//排序,从小到大
{
bool swpped = true;
do
{
swpped = false;
for (int i = 0; i < array.Count-1; i++)
{
if (com(array[i+1], array[i]))
{
//换位
T tem = array[i];
array[i] = array[i + 1];
array[i + 1] = tem;
swpped = true;
}
}
}
while (swpped);
}
}
class Employee //员工工资表
{
public Employee(string name,decimal money)
{
Name = name;
Money = money;
}
public string Name { get; }
public decimal Money { get; }
public static bool com(Employee e1, Employee e2)=> e1.Money < e2.Money;
}
static void Main(string[] args)
{
Employee[] em = { new Employee("张三", 12),
new Employee("李四", 11),
new Employee("王五", 10),
new Employee("赵柳", 14),
new Employee("力气", 24)};
bubble.Sort(em, Employee.com);
foreach (var item in em)
{
Console.WriteLine(item.Name+","+item.Money);
}
}
输出结果:
王五,10
李四,11
张三,12
赵柳,14
力气,24
请按任意键继续. . .
这个例子是将两个类里面的字段进行大小比较(工资),然后排序,返回一个结果,因为不能直接用"<"比较类的大小,所以需要另写一个方法进行比较,在排序的时候将此方法传入到排序方法里面,就行了。
排序里面的参数是数组和委托,数组就传入职工类数组,委托就传入比较大小方法。
(想到自己以前有一个类似的比较大小也是不能利用“<”比较,当时是在排序里面直接调用的比较方法,没有将方法进行参数的传递。对此有个疑问,为啥一定要将方法传递呢。)
根据以上的疑问,对代码有进行了修改。修改之后发现,修改后的方法只能对一个类进行排序。如果其他类也需要排序就需要写一个新的排序方法。