using System;using System.Collections.Generic;using System.Linq;using System.Text;namespace DelegateExample{ /// <summary> /// 给排序算法传递一个动态比较函数的委托示例 /// </summary> // 进行排序的委托 public delegate bool Compare(int left, int right); public class MyDelegateTest { private int[] items; public int[] Items { set { items = value; } get { return items; } } // 比大 public bool Greater(int left, int right) { return left > right; } // 比小 public bool Less(int left, int right) { return !Greater(left, right); } public void Sort(Compare compare) { for (int i = 0; i < items.Length - 1; i++) { for (int j = i + 1; j < items.Length; j++) { if (compare(items[i], items[j])) { int tmp = items[i]; items[i] = items[j]; items[j] = tmp; } } } } } class Sort { /* public static void Main() { MyDelegateTest sample = new MyDelegateTest(); int[] items = new int[10] { 7, 4, 9, 1, 3, 2, 8, 5, 6, 0}; sample.Items = items; // 使用降序 sample.Sort(new Compare(sample.Less)); for (int i = 0; i < sample.Items.Length; i++) { Console.WriteLine(sample.Items[i]); } Console.Read(); }*/ } /// <summary> /// 一个简单的委托示例 /// </summary> // 新建一个用以输出消息的委托 public delegate void WriteMessage(); public class MyDelegateTest2 { // 一个输出消息的静态方法 public static void StaticWrite() { Console.WriteLine("委托调用了一个静态方法."); } // 一个输出消息的类实例方法 public void Write() { Console.WriteLine("委托调用了一个类实例方法."); } } class WriteMessageClass { public static void Main() { // 新建一个委托,回调函数是一个静态方法 WriteMessage wm = new WriteMessage(MyDelegateTest2.StaticWrite); wm(); Console.WriteLine(); // 新建一个委托并与加到先前建立的委托组成委托链,回调函数是一个类实例方法 MyDelegateTest2 mdt = new MyDelegateTest2(); wm += new WriteMessage(mdt.Write); // 执行委托链上所有的回调函数 wm(); Console.Read(); } }}