IComparable介面最重要者在於其定義 CompareTo 方法,用以比較實作這個介面的物件,此方法回傳一個int數值型別的結果值,其定義形的式如下:
比較特別的是, IComparable 並非 Systm.Collection 的一員,其位於命名空間 System 。
若是要對集合中的物件作排序,新定義的集合類別必須實作 IComparable 介面,並且實作其中所定義的方法 CompareTo ,如果沒有完成此部份程式碼,則方法 Sort 無法被引用。
以下定義 IComparable 介面實作類別 ObjectElement 。
int CompareTo (object obj )物件引用這個方法,會與其參數 obj 作比較,並且根據比較的結果回傳結果值,當回傳值等於 0 的時候,表示兩個物件相等,若是傳回大於 0 的正值,引用方法的物件大於參數物件,反之則傳回小於零的整數值。
比較特別的是, IComparable 並非 Systm.Collection 的一員,其位於命名空間 System 。
若是要對集合中的物件作排序,新定義的集合類別必須實作 IComparable 介面,並且實作其中所定義的方法 CompareTo ,如果沒有完成此部份程式碼,則方法 Sort 無法被引用。
以下定義 IComparable 介面實作類別 ObjectElement 。
public class ObjectElement : IComparable { private int _objectID; public ObjectElement(int objectID) { _objectID = objectID; } public int GetID { get { return _objectID; } } public int CompareTo(Object pObject) { ObjectElement oe = (ObjectElement)pObject; return _objectID.CompareTo(oe.GetID); } }實作 CompareTo 方法接受一個 Object 物件型別參數 pObject ,將其鑄型成為 ObjectElement 型別,與本身的 _objectID 比較大小,以下撰寫程式以 ObjectElement 物件作為集合元素進行比較測試。
class Program { static void Main(string[] args) { Program program = new Program(); ArrayList arrayList = new ArrayList(); Console.WriteLine ("新增二十個亂數值初始化 ObjectElement 物件,插入 arrayList … \n"); Random r = new Random((new DateTime()).Millisecond); for (int i = 0; i < 20; i++) { int x = r.Next(0, 1000); arrayList.Add(new ObjectElement(x)); } program.WriteList(arrayList); Console.WriteLine("引用 arrayList.Sort() 排列集合中物件順序 \n"); arrayList.Sort(); program.WriteList(arrayList); Console.ReadKey(); } void WriteList(ArrayList arrayList) { for (int i = 0; i < arrayList.Count; i++) { ObjectElement myOE = (ObjectElement)arrayList[i]; Console.Write(myOE.GetID + ","); } Console.WriteLine("\n"); } }首先建立 ArrayList 物件,並將上述定義的 ObjectElement 物件當作元素,初始化以亂數取得的值設定為 _objectID ,執行各種元素操作,接下來引用 arrayList.Sort() 方法針對其中插入的ObjectElement 物件元素進行排序, ObjectElement 物件引用CompareTo 方法,依據其 _objectID 值重新排列元素在集合中的位置。
新增二十個亂數值初始化 ObjectElement 物件,插入 arrayList … 877,396,703,838,774,867,546,880,631,187,459,197,715,767,758,371,849,474,795,987, 引用 arrayList.Sort() 排列集合中物件順序 187,197,371,396,459,474,546,631,703,715,758,767,774,795,838,849,867,877,880,987,從輸出結果可以看到 Sort 方法,根據 _objectID 排列集合中ObjectElement 物件。
沒有留言:
張貼留言