VisualC#中如何使用IComparable和IComparer接口.docx

VisualC#中如何使用IComparable和IComparer接口.docx

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 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.

文档评论(0)

135****5541 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档