只來乾的,不來稀的。
/* * 由SharpDevelop建立。 * 使用者: Owner * 日期: 2012-12-24 * 時間: 14:05 * * 要改變這種模板請點擊 工具|選項|代碼編寫|編輯標準標頭檔 */using System;using System.Collections;/* * 假如我們開了一個水果超市:賣好多種類的水果,所以要統計我們的水果資訊。 * 營業員要準確的掌握水果的資訊就要進行排序,否則容易亂,一亂就容易出錯。 * 通過水果超市的例子示範IComparable和IComparer的用法 * */namespace TestIComparable{#if false#region 可排序的水果管理/// <summary>/// 我們超市有好多水果,要管理的話按照名字排序可以更好的管理。/// </summary>public class 水果 : IComparable{public string 名稱;public decimal 單價;public decimal 營業額;public 水果(string 名稱, decimal 單價, decimal 營業額){this.名稱 = 名稱;this.單價 = 單價;this.營業額 = 營業額;}#region IComparablepublic int CompareTo(object obj){水果 品種 = obj as 水果;return this.名稱.CompareTo(品種.名稱);}#endregion}public class 超市{public ArrayList 水果架 = new ArrayList();/// <summary>/// 超市進貨/// </summary>/// <param name="品種"></param>public void 進貨(水果 品種){水果架.Add(品種);}/// <summary>/// 整理賬目/// </summary>public void 整理賬目(){水果架.Sort();}/// <summary>/// 超市盤點/// </summary>public void 盤點(){Console.WriteLine("一天的營業結束了,進行盤點...");foreach(水果 品種 in 水果架){Console.WriteLine("\t{0}: 單價為{1},今日營業額{2}。", 品種.名稱, 品種.單價, 品種.營業額);}Console.WriteLine("盤點完畢");}}class Program{public static void Main(string[] args){水果 西瓜 = new 水果("西瓜", 1.00m, 800m);水果 蘋果 = new 水果("蘋果", 6.00m, 512m);水果 柑橘 = new 水果("柑橘", 2.00m, 2154m);水果 香蕉 = new 水果("香蕉", 7.00m, 127m);水果 奇異果 = new 水果("奇異果", 15.00m, 985m);超市 陽光超市 = new 超市();Console.WriteLine("超市開始營業了");陽光超市.進貨(西瓜);陽光超市.進貨(蘋果);陽光超市.進貨(柑橘);陽光超市.進貨(香蕉);陽光超市.進貨(奇異果);Console.WriteLine("沒有整理就盤點...");陽光超市.盤點();Console.WriteLine();Console.WriteLine("整理以後盤點...");陽光超市.整理賬目();陽光超市.盤點();// TODO: Implement Functionality HereConsole.Write("Press any key to continue . . . ");Console.ReadKey(true);}}#endregion#endif#if true#region 老闆要看營業額,顧客要看單價/// <summary>/// 營業員好管理了,但是老闆要看營業額,顧客需要看單價/// 程式員又得忙活了,用IComparer搞定。/// </summary>public class 水果 : IComparable{public enum 定序{老闆要的,營業員要的,顧客要的}public string 名稱;public decimal 單價;public decimal 營業額;public 水果(string 名稱, decimal 單價, decimal 營業額){this.名稱 = 名稱;this.單價 = 單價;this.營業額 = 營業額;}#region IComparerpublic int CompareTo(object obj){水果 品種 = obj as 水果;return this.名稱.CompareTo(品種.名稱);}#endregionpublic class 老闆要的排序 : IComparer{public int Compare(object x, object y){水果 s1 = x as 水果;水果 s2 = y as 水果;if (s1.營業額 == s2.營業額)return 0;else if (s1.營業額 > s2.營業額)return 1;elsereturn -1;}}public class 顧客要的排序 : IComparer{public int Compare(object x, object y){水果 s1 = x as 水果;水果 s2 = y as 水果;if (s1.單價 == s2.單價)return 0;else if (s1.單價 > s2.單價)return 1;elsereturn -1;}}}public class 超市{public ArrayList 水果架 = new ArrayList();/// <summary>/// 超市進貨/// </summary>/// <param name="品種"></param>public void 進貨(水果 品種){水果架.Add(品種);}/// <summary>/// 整理賬目/// </summary>public void 整理賬目(水果.定序 規則){switch(規則){case 水果.定序.老闆要的:水果架.Sort((IComparer)new 水果.老闆要的排序());break;case 水果.定序.顧客要的:水果架.Sort((IComparer)new 水果.顧客要的排序());break;default:水果架.Sort();break;}}public void 定製整理規則(){水果架.Sort();}/// <summary>/// 超市盤點/// </summary>public void 盤點(){Console.WriteLine("一天的營業結束了,進行盤點...");foreach(水果 品種 in 水果架){Console.WriteLine("\t{0}: 單價為{1},今日營業額{2}。", 品種.名稱, 品種.單價, 品種.營業額);}Console.WriteLine("盤點完畢");}}class Program{public static void Main(string[] args){水果 西瓜 = new 水果("西瓜", 1.00m, 800m);水果 蘋果 = new 水果("蘋果", 6.00m, 512m);水果 柑橘 = new 水果("柑橘", 2.00m, 2154m);水果 香蕉 = new 水果("香蕉", 7.00m, 127m);水果 奇異果 = new 水果("奇異果", 15.00m, 985m);超市 陽光超市 = new 超市();Console.WriteLine("超市開始營業了");陽光超市.進貨(西瓜);陽光超市.進貨(蘋果);陽光超市.進貨(柑橘);陽光超市.進貨(香蕉);陽光超市.進貨(奇異果);Console.WriteLine("沒有整理就盤點...");陽光超市.盤點();Console.WriteLine();Console.WriteLine("整理以後盤點...");陽光超市.整理賬目(水果.定序.營業員要的);陽光超市.盤點();Console.WriteLine();Console.WriteLine("老闆要看哪個賣的最好...");陽光超市.整理賬目(水果.定序.老闆要的);陽光超市.盤點();Console.WriteLine();Console.WriteLine("顧客要看哪個最便宜...");陽光超市.整理賬目(水果.定序.顧客要的);陽光超市.盤點();// TODO: Implement Functionality HereConsole.Write("Press any key to continue . . . ");Console.ReadKey(true);}}#endregion#endif}
通過控制#if來進行兩個程式的測試。這個介面很有用,對於資料整理還是很有好處的。