using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace ConsoleApplication10 { class Program { static void Main(string[] args) { Dog d1 = new Dog(65); Dog d2 = new Dog(12); Pair dogPair = new Pair(d1, d2); Console.WriteLine("dogPair \t:{0}",dogPair.ToString()); dogPair.sort(Dog.orderDogs); Console.WriteLine("After sort dogPair \t:{0}",dogPair.ToString()); Console.ReadLine(); } } public enum comparison { theFirstComesFirst = 1, theSecordComesFirst = 2 } public delegate comparison WhichIsFirst(object obj1, object obj2); public class Pair { private object[] thePair = new object[2]; public Pair(object firstObject, object secondObject) { thePair[0] = firstObject; thePair[1] = secondObject; } public void sort(WhichIsFirst theDelegatedFunc) { if(theDelegatedFunc(thePair[0],thePair[1])==comparison.theSecordComesFirst) { object 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 static WhichIsFirst orderDogs { get { return new WhichIsFirst(WhichDogComesFirst); } } public Dog(int weight) { this.weight = weight; } public static comparison WhichDogComesFirst(object obj1, object obj2) { Dog d1 = (Dog)obj1; Dog d2 = (Dog)obj2; return d1.weight > d2.weight ? comparison.theSecordComesFirst : comparison.theFirstComesFirst; } public override string ToString() { return weight.ToString(); } } }