C#泛型委托的用法实例分析
程序员文章站
2022-04-29 20:39:49
本文实例讲述了c#泛型委托的用法。分享给大家供大家参考。具体分析如下:
冒泡排序大家都知道,例如一个整形数组,可以用冒泡排序来使它按从小到大的顺序排序,
但它仅限于了按...
本文实例讲述了c#泛型委托的用法。分享给大家供大家参考。具体分析如下:
冒泡排序大家都知道,例如一个整形数组,可以用冒泡排序来使它按从小到大的顺序排序,
但它仅限于了按整形数组来排序,如何做到按任意类型进行排序呢,例如按一个类的某个属性进行排序?
举例说明:定义一组以类memployee为元素的数组,按memployee的salary属性进行排序,类似的可以引伸为对其他类型的比较
元素类定义:
public class memployee { public string name { get; private set; } public decimal salary { get; private set; } public memployee(string name, decimal salary) { this.name = name; this.salary = salary; } public override string tostring() { return string.format("{0},{1:c}", name, salary); } public static bool comparesalary(memployee e1, memployee e2) //定义一个静态的比较函数 { return e1.salary < e2.salary; } }
比较类定义:
//bubblesorter现在已经是一个通用的排序类了,这里委托起到了关键的作用
public class bubblesorter { //该函数接收两个参数,第一个为泛型数组参数, //第二个是系统自定义的func委托,它接收两参数,返回bool类型 public static void sort<t>(ilist<t> sortarray,func<t,t,bool> comparison) { for (int i = 0; i < sortarray.count; i++) { for (int j = i + 1; j < sortarray.count; j++) { if (comparison(sortarray[j],sortarray[i])) //调用委托进行大小比较 { t temp =sortarray[i]; sortarray[i] = sortarray[j]; sortarray[j] = temp; } } } } }
测试代码:
private void button_测试委托3_click(object sender, eventargs e) { memployee[] employees = { new memployee("ronaldo",40000), new memployee("rivaldo",35000), new memployee("cronaldo",80000) }; bubblesorter.sort<memployee>(employees, memployee.comparesalary); foreach (memployee otmp in employees) { console.writeline(otmp.tostring()); } }
测试结果如下图所示:
希望本文所述对大家的c#程序设计有所帮助。
上一篇: 标签--格式化标签