概念就不多说了,网上一搜一堆。其实就相当于c++的函数指针。通常拿接口来比较 “接口是一种引用类型,他定了一个类设计的方案(layout),但本身没有任何实现。而委托/代理定义了设计的方案,接受与其方案相匹配的方法” using System; namespace ConsoleApplication2 { class SortClass { public static int[] arr; //静态数组,构造时赋值 public SortClass(int[] b) { arr = b; } public delegate void Sort(int[] a); //委托声明 public void DoSort(Sort mysort) //实例需要调用方法;该方法需要一个类似"函数指针"的参数, //在c#中通过 代理(Sort)实现 { mysort(arr); } } class Program { static void Main(string[] args) { int[] t = { 1,3,2,5,6,9,100,200,2 }; //要排序数组 SortClass sc = new SortClass(t); //构造时传入 sc.DoSort(dsort); foreach (int i in SortClass.arr) { Console.WriteLine("=={0}==", i); } Console.ReadLine(); } //升序冒泡排序 public static void asort(int[] a) { int count = a.Length; if (count <= 0) return; int temp = a[0]; for (int i = 0; i < count; i++) { //Console.WriteLine(a[i]); for (int j = i+1; j < count; j++) { //Console.WriteLine(" ---{0} {1}",a[i],a[j]); if (a[i] > a[j]) { temp = a[i]; a[i] = a[j]; a[j] = temp; } //Console.WriteLine(" +++{0} {1}", a[i], a[j]); } } } //降序冒泡排序 public static void dsort(int[] a) { int count = a.Length; if (count <= 0) return; int temp = a[0]; for (int i = 0; i < count; i++) { for (int j = i+1; j < count ; j++) { if (a[i] < a[j]) { temp = a[i]; a[i] = a[j]; a[j] = temp; } } } } } }