您当前的位置: 首页 >  ar

[泛型]-泛型接口IComparable

发布时间:2010-11-21 23:00:00 ,浏览量:0

系统提供了许多泛型类和泛型接口,List和Dictionary是常用的泛型类。IComparable是最常用的泛型接口。泛型接口具有一般接口的共同特点,即在接口中可以包含字段,属性,方法和索引器,但都不能实现。

IComparable和IComparer接口区别如下: ◆IComparable在要比较的对象的类中实现,可以比较该对象和另一个对象; ◆IComparer在一个单独的类中实现,可以比较任意两个对象。

IComparable接口规定了一个没有实现的方法CompareTo(Object obj),语法如下: public interface IComparable { int CompareTo(Object ojb); }

此接口的方法CompareTo用于比较对象大小,如果一个类实现了这个接口中的该方法,说明这个类的对象是可以比较大小的。 int CompareTo(Object obj)方法返回一个整型值,其含义下:

如果当前对象小于obj,则返回值小于0。 如果当前对象小于obj,则返回值大于0。 如果当前对象小于obj,则返回值等于0。 IComparable接口接受的参数类型为Object,因此需要对CompareTo()函数的参数进行运行时类型校验。每一次执行比较时,都要重新解析参数的类型。

using System; using System.Collections.Generic; public class Student: IComparable { private string name; public string Name {    get    {     return name;    }    set    {     name = value;    } } private int age; public int Age {    get    {     return age;    }    set    {     age = value;    } } public Student(string sname, int sage) {    this.name = sname;    this.age = sage; } //实现接口中的方法 public int CompareTo(object obj) {    //将参数转化为Student对象    Student other = obj as Student;    //比较大小,返回结果    return this.age.CompareTo(other.age); } }

class Progarm { static void Main() {    Student stu1 = new Student("张三", 10);    Student stu2= new Student("李四", 20);    Student stu3 = new Student("王五", 30);    //对象之间进行比较    if (stu1.CompareTo(stu2) > 0)     Console.WriteLine("{0}的年龄大于{1}", stu1.Name, stu2.Name);    else     Console.WriteLine("{0}的年龄小于{1}", stu1.Name, stu2.Name); } }

注意:参数obj必须与实现该接口的类有相同的类型,否则会引发异常。

Student other = obj as Student; 使用as关键字将obj转换为实现接口的Student类的对象。 说明:as属于运算符,用于在兼容的引用类型之间执行类型转换,类似于强制转换,只是强制转换失败时会引发异常,而as运算符将返回空值,不会引发异常。

泛型接口IComparable就是接口Icomparable的泛型版本,和前面的泛型一样,此泛型接口对类型有严格的约束,不需要类型转换。

IComparable泛型接口仅包含一个方法,语法如下:

public interface Icomparable { int CompareTo(T t) }

其中,“”和List中的T有相同的含义,代表任意类型,CompareTo方法中的参数t代表该数据类型的对象。

把上面的代码改写一下: public class Student: IComparable 换成 public class Student: IComparable 同时实现接口的代码改为: //实现接口中的方法 public int CompareTo(Student other) {    //比较大小,返回结果    return this.age.CompareTo(other.age); }

其他代码不需要修改,运行结果和上面代码相同。

关注
打赏
1688896170
查看更多评论

暂无认证

  • 0浏览

    0关注

    106485博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文
立即登录/注册

微信扫码登录

0.3338s