C#泛型委托的用法实例分析
作者:永远爱好写程序 发布时间:2021-09-16 23:29:52
标签: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#程序设计有所帮助。


猜你喜欢
- 本文要实现的是在 android 8.0 的平台上,蓝牙遥控器与TV自动配对,具体就是在TV端打开配对界面,TV端开始搜索远程蓝牙设备,按下
- 程序触发鼠标、键盘事件是C#程序设计中比较常见的功能,本文实例展示了C#中winform实现自动触发鼠标、键盘事件的方法,有不错的实用价值。
- 本文实例为大家分享了java实现猜拳游戏的具体代码,供大家参考,具体内容如下package com.farsight.session7;im
- 使用SlidingTabLayout需要准备2个类,分别是 SlidingTabLayout,与SlidingTabStrip,,放进项目中
- 一、事件背景个人感觉自己做性能测试,可以说是轻车熟路了,而且工作多年一直都是这一套测试思路及体系,从未质疑过自己,也许是狮子座的迷之自信吧!
- 在C#中,值类型和引用类型是相当重要的两个概念,必须在设计类型的时候就决定类型实例的行为。如果在编写代码时不能理解引用类型和值类型的区别,那
- 我就废话不多说了,大家还是直接看代码吧~package c10; import java.util.Scanner; public clas
- 1、简介对于数据访问层,无论是SQL(关系型数据库) 还是NOSQL(非关系型数据库),SpringBoot 底层都是采用 SpringDa
- 在我们的web开发中,很多的时候都需要把本机的一些文件上传到web服务器上面去。如:一个BBS系统,当用户使用这是系统的时候,能把本机的一些
- 如果需要在布局中创造一个层叠的概念,那么使用Android系统中的ViewGroup是不够的,但是可以通过改变ViewGroup的绘制顺序实
- 本文介绍了spring cloud Feign使用中遇到的问题总结,分享给大家,具体如下:问题一:在前面的示例中,我们讲过@RequestM
- 对 Excel 进行读写操作是生产环境下常见的业务,网上搜索的实现方式都是基于POI和JXL第三方框架,但都不是很全面。小编由于这两天刚好需
- 1.使用的是maven项目,添加依赖<!-- mybatis-plus begin --> <depend
- 在开发Android App过程中,经常会遇见这样的功能。从当前的app跳转到一个应用商店并且跳转到自己app的详情页面,让用户给自己的Ap
- 本文实例讲述了java编程实现基于UDP协议传输数据的方法。分享给大家供大家参考,具体如下:UDP协议(User Datagram Prot
- Spring Security的本质Spring Security 本质上是一连串的 Filter , 然后又以一个独立的 Filter 的
- 本文实例介绍了基于socket和javaFX简单文件传输工具,分享给大家供大家参考,具体内容如下package application;im
- 一、负载均衡负载均衡(Load Balance): 建立在现有网络结构之上,它提供了一种廉价有效透明的方法扩展网络设备和服务器的带宽、增加吞
- 在android6.0之后谷歌对指纹识别进行了官方支持,今天还在放假,所以就随意尝试了一下这个api,但是遇到了各种各样的问题 ①
- 本文实例讲述了C#中累加器函数Aggregate用法。分享给大家供大家参考。具体如下:var shouldExclude = false;v