C#泛型委托的用法实例分析
作者:永远爱好写程序 时间:2021-09-16 23:29:52
本文实例讲述了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#程序设计有所帮助。
标签:C#,委托
![](/images/zang.png)
![](/images/jiucuo.png)
猜你喜欢
Java实现非阻塞式服务器的示例代码
2022-01-29 19:29:11
关于BufferedReader读取文件指定字符集问题
2023-09-03 11:10:28
Java List集合排序实现方法解析
2023-01-06 05:40:14
Spring基于注解的缓存声明深入探究
2023-01-20 13:26:06
Java 中Comparable和Comparator区别比较
2023-10-28 23:16:34
详解在Spring中如何使用AspectJ来实现AOP
2021-10-23 02:06:06
Java栈和基础队列的实现详解
2023-07-02 05:36:59
![](https://img.aspxhome.com/file/2023/7/61597_0s.gif)
spring Boot打包部署到远程服务器的tomcat中
2023-01-14 21:45:28
![](https://img.aspxhome.com/file/2023/9/62109_0s.png)
线程池中execute与submit的区别说明
2023-03-18 23:09:04
![](https://img.aspxhome.com/file/2023/6/64786_0s.png)
Java 数组高频考点分析讲解
2021-09-01 13:14:36
![](https://img.aspxhome.com/file/2023/2/61152_0s.png)
基于ReentrantLock的实现原理讲解
2023-11-23 22:43:23
![](https://img.aspxhome.com/file/2023/9/59849_0s.jpg)
基于SPRINGBOOT配置文件占位符过程解析
2021-06-27 04:25:12
Mybatis如何实现@Select等注解动态组合SQL语句
2022-04-13 16:42:05
java实现简单的俄罗斯方块
2021-08-02 18:13:11
![](https://img.aspxhome.com/file/2023/4/71184_0s.jpg)
jvm细节探索之synchronized及实现问题分析
2023-08-24 02:13:29
![](https://img.aspxhome.com/file/2023/6/57916_0s.png)
springboot使用自定义注解实现aop切面日志
2023-11-11 09:14:48
浅谈Java实现面向对象编程java oop
2022-12-26 03:45:29
![](https://img.aspxhome.com/file/2023/7/88197_0s.png)
深入了解Java核心类库--BigDecimal和System类
2023-12-18 01:50:28
深入聊一聊JDK中的Map和Set
2023-10-21 15:54:20
![](https://img.aspxhome.com/file/2023/4/72294_0s.jpg)
解决BeanUtils.copyProperties无法成功封装的问题
2023-11-23 14:59:23