using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading; //如果账户金额小于0 触发事件 namespace Starter { public enum Comparison { theFirstComesFirst = 1, theSecondComesFirst = 2 } //包含两项的简单集合 public class Pair<T> { //存放两个对象的私有数组 private T[] thePair = new T[2]; //委托声明 public delegate Comparison WhichIsFirst(T obj1, T obj2); //构造方法,参数为两个对象,按接收顺序添加 public Pair(T firstObject, T secondObject) { thePair[0] = firstObject; thePair[1] = secondObject; } //公共方法,按对象具体顺序范畴排序 public void Sort(WhichIsFirst theDelegatedFunc) { if (theDelegatedFunc(thePair[0], thePair[1]) == Comparison.theSecondComesFirst) { T temp = thePair[0]; thePair[0] = thePair[1]; thePair[1] = temp; } } //反序排列 public void ReverSort(WhichIsFirst theDelegatedFunc) { if (theDelegatedFunc(thePair[0], thePair[1]) == Comparison.theFirstComesFirst) { T temp = thePair[0]; thePair[0] = thePair[1]; thePair[1] = temp; } } //要求两个对象提供字符串值 public override string ToString() { return thePair[0].ToString() + ", " + thePair[1].ToString(); } } public class Dog { private int weight; public Dog(int weight) { this.weight = weight; } public static Comparison WhichDogComesFirst(Dog d1,Dog d2) { return d1.weight > d2.weight ? Comparison.theSecondComesFirst : Comparison.theFirstComesFirst; } public override string ToString() { return weight.ToString(); } } public class Student { private string name; public Student(string name) { this.name = name; } public static Comparison WhichStudentComesFirst(Student s1, Student s2) { return (String.Compare(s1.name, s2.name)<0 ? Comparison.theFirstComesFirst : Comparison.theSecondComesFirst ); } public override string ToString() { return name; } } class Program { static void Main(string[] args) { Student Jess = new Student("Jess"); Student Mary = new Student("Mary"); Dog Milo = new Dog(26); Dog Free = new Dog(12); Pair<Student> studentPair = new Pair<Student>(Jess,Mary); Pair<Dog> dogPair = new Pair<Dog>(Milo, Free); Console.WriteLine("student pair: " + studentPair.ToString()); Console.WriteLine("dog pair: " + dogPair.ToString()); //Pair下的委托函数 new 出来,Student下的WhichStudentComesFirst绑定到委托函数,参数列表需要相同 Pair<Student>.WhichIsFirst theStudentDelegate = new Pair<Student>.WhichIsFirst(Student.WhichStudentComesFirst); Pair<Dog>.WhichIsFirst theDogDelegate = new Pair<Dog>.WhichIsFirst(Dog.WhichDogComesFirst); studentPair.Sort(theStudentDelegate); Console.WriteLine("student after sort: " + studentPair.ToString()); studentPair.ReverSort(theStudentDelegate); Console.WriteLine("student after ReverSort: " + studentPair.ToString()); Console.ReadLine(); } } }