关于IComparable接口
实现IComparable接口,需要实现CompareTo方法,该方法在MSDN中定义如下:
Compares the current instance with another object of the same type.
(比较当前实例和另一个相同类型的对象)
Namespace: System
Assembly: mscorlib (in mscorlib.dll)
Parameters
- obj
-
An object to compare with this instance.
Return Value
A 32-bit signed integer that indicates the relative order of the objects being compared. The return value has these meanings:
Value |
Meaning |
---|---|
Less than zero |
This instance is less than obj. 若返回值为负,当前实例小于比较对象 |
Zero |
This instance is equal to obj. 若返回值为零,当前实例等于比较对象 |
Greater than zero |
This instance is greater than obj. 若返回值为正,当前实例大于比较对象 |
实际应用中,System.Array中的很多方法都需要实现该接口,如:
- Array.IndexOf
- Array.LastIndexOf
- Array.Sort
- Array.Reverse
- Array.BinarySearch
示例代码如下:
1using System;
2
3namespace icom_ex
4{
5 public class XClass : IComparable
6 {
7 public XClass(int data)
8 {
9 propNumber = data;
10 }
11
12 private int propNumber;
13
14 public int Number
15 {
16 get
17 {
18 return propNumber;
19 }
20 }
21
22 public int CompareTo(object obj)
23 {
24 XClass comp = (XClass)obj;
25 if (this.Number == comp.Number)
26 return 0;
27 if (this.Number < comp.Number)
28 return -1;
29 return 1;
30 }
31
32 }
33 public class Starter
34 {
35 public static void Main()
36 {
37 XClass[] objs = { new XClass(5), new XClass(10) ,new XClass(1)};
38 Array.Sort(objs);
39 foreach (XClass obj in objs)
40 Console.WriteLine(obj.Number);
41 }
42 }
43}
44
如不实现CompareTo函数,调用Array.Sort时会出现一个错误!
2
3namespace icom_ex
4{
5 public class XClass : IComparable
6 {
7 public XClass(int data)
8 {
9 propNumber = data;
10 }
11
12 private int propNumber;
13
14 public int Number
15 {
16 get
17 {
18 return propNumber;
19 }
20 }
21
22 public int CompareTo(object obj)
23 {
24 XClass comp = (XClass)obj;
25 if (this.Number == comp.Number)
26 return 0;
27 if (this.Number < comp.Number)
28 return -1;
29 return 1;
30 }
31
32 }
33 public class Starter
34 {
35 public static void Main()
36 {
37 XClass[] objs = { new XClass(5), new XClass(10) ,new XClass(1)};
38 Array.Sort(objs);
39 foreach (XClass obj in objs)
40 Console.WriteLine(obj.Number);
41 }
42 }
43}
44