Warning: Undefined array key 0 in /www/wwwroot/w/show/success.php on line 261

Warning: Trying to access array offset on value of type null in /www/wwwroot/w/show/success.php on line 261
_higrid.net-嗨网
当前位置:嗨网首页>书籍在线阅读

  
选择背景色: 黄橙 洋红 淡粉 水蓝 草绿 白色 选择字体: 宋体 黑体 微软雅黑 楷体 选择字体大小: 恢复默认

Warning: Undefined array key 0 in /www/wwwroot/w/show/success.php on line 266

Warning: Trying to access array offset on value of type null in /www/wwwroot/w/show/success.php on line 266

Warning: Undefined array key 0 in /www/wwwroot/w/show/success.php on line 266

Warning: Trying to access array offset on value of type null in /www/wwwroot/w/show/success.php on line 266

10.5.1 委托

委托也叫代理,就是把事情交付给别人去办,如委托律师代理打官司,委托同学代买火车票等。C#中如果将一个方法委托给一个对象,这个对象就可以全权代理这个方法的执行。使用委托时首先要定义委托,声明委托能代理什么类型的方法,就像房产中介能代理抵押贷款业务而不能代理打官司一样。定义委托的语法如下。

<访问修饰符> delegate 返回类型 委托名();

从上面可以看出定义委托和定义方法相似。委托没有具体的实现体,委托能够代表什么样的方法由它的返回值类型和参数列表决定。如果定义如下的委托:

public delegate void stuDelegate(string name);

那么使用stuDelegate委托代表的只可以是没有返回值,且参数为一个字符串的方法。

定义了委托之后要使用委托,首先要实例化委托。实例化委托就是将其指向某个方法,即调用委托的构造函数,并将相关联的方法作为参数传递。然后通过调用委托,执行相关方法的代码,实现委托。

【范例10-4】 使用委托对数组元素按降序排列。

(1)在Visual Studio 2013中新建C#控制台程序,项目名为“DelegateSort”,然后在Program.cs中添加一个名为Test的类,代码如下(代码10-4-1.txt)。

01  class Test
02  {
03          public static bool  SortArray(int[] array)
04          {  //定义方法SortArray用于按照降序排序
05                  for (int i = array.GetUpperBound(0); i >= 0; i--)//循环从后向前分别取出数组中的一个元素
06                  { //冒泡排序,将数值小的元素移到后面,直到所有的元素按照降序排列
07                          for (int j = 0; j <= i; j++) 
08                                  if (array[j] <= array[i])  //如果前面的某个元素值小于后面的元素值
09                                  Swap(ref array[j], ref array[i]);     //交换二者的位置
10                  }
11                  return true;
12          }
13          static void Swap(ref int x, ref int y)    //交换两个数的方法
14          {
15                  int temp = x;
16                  x = y;
17                  y = temp;
18          }
19  }

(2)在Program.cs中定义委托,实现委托排序,代码如下(代码10-4-2.txt)。

01  public delegate bool SortDelegate(int[] x);            //定义委托SortDelegate
02  static void Main(string[] args)
03  {
04          int[] arr = new int[] { 8, 9, 5, 7, 2, 1, 4, 5, 6 };  //定义一个整型数组用于委托排序
05          Console.WriteLine("排序前的数组元素是");
06          foreach (int i in arr)                         //遍历数组按顺序输出排序前各个元素的值
07                  { Console.Write("{0}  ", i); }
08          SortDelegate myDelegate;                       //声明委托变量
09          myDelegate = new SortDelegate(Test.SortArray );//实例化委托,委托Test的SortArray排序
10          myDelegate(arr);        //传递参数,调用委托排序
11          Console.WriteLine("\n排序后的数组元素是");
12                  foreach (int i in arr)                //遍历数组按顺序输出排序后各个元素的值
13                  { Console.Write("{0}  ", i);  }       //输出排序后的数组元素
14          Console.ReadKey();
15  }

【运行结果】

单击工具栏中的 按钮,即可在控制台中输出如下图所示的结果。

172.png 【范例分析】

在【范例10-4】中,步骤(1)定义了类Test,在Test中SortArray方法实现了对数组元素按降序排列的操作。在步骤(2)中,第1行定义委托SortDelegate,第8~9行是声明委托变量并实例化,第10行调用委托实现数组元素排序。


Warning: Undefined array key 0 in /www/wwwroot/w/show/success.php on line 276

Warning: Trying to access array offset on value of type null in /www/wwwroot/w/show/success.php on line 276

Warning: Undefined array key 0 in /www/wwwroot/w/show/success.php on line 276

Warning: Trying to access array offset on value of type null in /www/wwwroot/w/show/success.php on line 276