- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
第
VisualC#中如何使用IComparable和IComparer接口
目录概要IComparable接口IComparer接口逐步讲解的示例:本文同时讨论了IComparable和IComparer接口,原因有两点。这两个接口经常一起使用。虽然接口类似且名称相似,但它们却有不同的用途。
原文:UsetheIComparableandIComparerinterfacesinVisualCSharp
本文介绍了在VisualC#中如何使用IComparer和IComparable接口。
概要
本文同时讨论了IComparable和IComparer接口,原因有两点。这两个接口经常一起使用。虽然接口类似且名称相似,但它们却有不同的用途。
如果你有一个支持IComparer的类型数组(例如字符串或整数),你可以对它进行排序而不需要提供任何对IComparer的显式引用(译注:意思是把一个IComparer的实现类作为参数传递给排序方法)。在这种情况下,数组元素会被转换为IComparer的默认实现(Comparer.Default)。然而,如果你想为自定义对象提供排序或比较能力,你必须实现这两个接口中的一个或两个。
本文引用了Microsoft.NETFramework类库命名空间System.Collections。
IComparable接口
IComparable接口的作用是提供一种比较特定类型的两个对象的方法。如果你想为你的对象提供任何排序能力,那么这是必须的。可以将IComparable视为为你的对象提供默认的排序顺序。例如,如果你有一个对象类型的数组,然后你在该数组上调用Sort方法,则排序期间的对象比较是由IComparable提供的。当你实现IComparable接口时,必须实现CompareTo方法,如下所示:
//IComparable的CompareTo方法,提供默认的排序。
intIComparable.CompareTo(objectobj)
Carc=(Car)obj;
returnString.Compare(this.make,c.make);
}
CompareTo方法中如何进行比较取决于被比较值的数据类型。在本例中使用String.Compare方法,因为被选择用于比较的属性是字符串。
IComparer接口
IComparer接口的作用是提供更多的比较机制。例如,你可能想要你的类的排序上使用多个字段或属性,在同一字段上提供升序和降序,或者两者兼而有之。(译注,这个时候就必须要使用IComparer接口了。)
使用IComparer是一个两步过程。首先,声明一个实现IComparer的类,然后实现Compare方法:
privateclassSortYearAscendingHelper:IComparer
intIComparer.Compare(objecta,objectb)
Carc1=(Car)a;
Carc2=(Car)b;
if(c1.yearc2.year)
return1;
if(c1.yearc2.year)
return-1;
else
return0;
}
注意:
IComparer.Compare方法需要三元比较。根据其中一个值是否大于、等于或小于另一个值,返回1、0或-1。可以通过切换此方法中的逻辑运算符来更改排序顺序(升序或降序)。
第二步是声明一个返回IComparer对象实例的方法:
publicstaticIComparerSortYearAscending()
return(IComparer)newSortYearAscendingHelper();
}
在本例中,该对象被用作第二个参数被传递给Array.Sort的接受IComparer实例的重载方法。IComparer的使用并不局限于数组。它被许多不同的集合和控件类接受为参数。
逐步讲解的示例:
以下示例演示了如何使用这些接口。为了演示IComparer和IComparable,我们创建了一个名为Car的类,该类拥有Make和Year两个属性。通过IComparable接口,为Make字段启用了升序排序;通过IComparer接口,为Make字段启用了降序排序。通过使用IComparer,为Year属性提供了升序和降序排序。
1.
您可能关注的文档
最近下载
- 植保无人机飞行作业服务设备维护及调试方案.doc VIP
- 海迪克新材料科技有限公司年产聚-3,4-乙烯二氧噻(PEDOT)精品 47.7 吨新建项目环评报告表.docx VIP
- 2025年西师版三年级上册数学全册教案(完整) .pdf VIP
- 急救技能—心肺复苏(2024版).pptx VIP
- T_ZNZ 094—2024(滨海盐碱地生物改良技术规范).pdf VIP
- 数学北师大课标版八年级上册综合与实践 创新作业设计模板.docx VIP
- 甲状腺危象病人的护理.pptx VIP
- 2021年咸阳经开城市发展集团有限公司招聘试题及答案解析.docx VIP
- 2024年人教版七年级英语上册单词 .pdf VIP
- 化工总控工培训.pptx VIP
文档评论(0)