代码编写及运行环境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 }