代碼編寫及運行環境Visual Studio NET v
view plain using Systemusing SystemCollectionsGenericusing SystemLinqusing SystemText
namespace DelegateUseInCommonClass { /// <summary> /// 一般通用類的設計都包含一些標准的任務代碼這些代碼包含任務如何執行的邏輯但是有的時候這些任務包含一些/// 子任務只有具體使用通用類的對象才知道如何執行這些子任務比如說:/// 建立了一個給對象排序的通用類在使用的時候需要知道具體的排序規則才能順利完成排序比如int對象是比較大小/// string對象是比較第一個字母一些復雜對象可能是比較其中的某個屬性值完成排序
/// 這種情況可以通過委托實現對於子任務使用委托可以方便通用類的使用者具體執行執行子任務的方式
/// </summary> class Program { static void Main(string[] args)
{ //定義並初始化不同類型的三個數組int[] intItems = { }string[] stringItems = { test best active card book }Person[] personItems = { new Person( Mark) new Person( Mary) new Person( Oscar) new Person( Kele)new Person(Ada) }
#region Int類型的排序
ConsoleWriteLine(intItems排序前)ConsoleWrite( )foreach (int i in intItems)
{ ConsoleWrite(stringFormat({} i))} ConsoleWriteLine()//給intItems排序CommonClassSort<int>(intItems (item item) => { if (item > item)
return trueelse return false})ConsoleWriteLine(intItems按Int值從小到大排序後)ConsoleWrite( )foreach (int i in intItems)
{ ConsoleWrite(stringFormat({} i))} ConsoleWriteLine()
#endregion
#region String類型的排序ConsoleWriteLine(stringItems排序前)ConsoleWrite( )foreach (string str in stringItems)
{ ConsoleWrite(stringFormat({} str))} ConsoleWriteLine()//給stringItems排序CommonClassSort<string>(stringItems (item item) => { if (itemCompareTo(item) > )
return trueelse return false})ConsoleWriteLine(stringItems按string首字母排序後)ConsoleWrite( )foreach (string str in stringItems)
{ ConsoleWrite(stringFormat({}str))} ConsoleWriteLine()
#endregion
#region Person類型的排序
ConsoleWriteLine(personItems排序前)foreach (Person per in personItems)
{ ConsoleWriteLine(stringFormat( Person Name{}Age{}perNameperAge))} CommonClassSort<Person>(personItems (item item) => { if (itemAge > itemAge)
return trueelse return false})ConsoleWriteLine(personItems按年齡從小到大排序後)foreach (Person per in personItems)
{ ConsoleWriteLine(stringFormat( Person Name{}Age{} perName perAge))} CommonClassSort<Person>(personItems (item item) => { if (itemNameCompareTo(itemName)>)
return trueelse return false})ConsoleWriteLine(personItems按姓名首字母排序後)foreach (Person per in personItems)
{ ConsoleWriteLine(stringFormat( Person Name{}Age{} perName perAge))}
#endregion }
//定義Person類class Person { private int _Ageprivate string _Name
public int Age { get { return _Age} set { _Age = value} public string Name { get { return _Name} set { _Name = value}
public Person(int age string name)
{ _Age = age_Name = name}
#region 比較通用類設計/// <summary> /// 此處使用排序來說明委托在通用類中的使用此方法在多本C#說中都有介紹包括:/// 《C#本質論》/// 《C#高級編程》/// </summary> class CommonClass { //定義用於比較兩個對象並返回bool類型的委托類型public delegate bool Compare<T>(T item T item)
//通用排序方法可以用於比較任何對象具體比較結果依賴於子任務Compare<T>類型的compare public static void Sort<T>(T[] items Compare<T> compare)
{ for (int i = i < itemsCount() i++)
{ for (int j = i j < itemsCount() j++)
{ if (compare(items[i] items[j]))
{ T temp = items[i]items[i] = items[j]items[j] = temp} #endregion }
From:http://tw.wingwit.com/Article/program/net/201311/13262.html