A, 新建winform项目【01委托】,项目中添加dg_SayHi.cs 委托类 用于存储方法
namespace _01委托 { //定义委托 【类】 delegate void dg_SayHi(); }
B, Winfrom中添加按钮 "委托",按钮事件“btnDelegate_Click”中新建委托对象,并添加、移除 方法:
/// <summary> /// 点击按钮事件 /// </summary> private void btnDelegate_Click(object sender, EventArgs e) { //委托是方法的容器,可以在委托对象中添加、移除方法 ///创建委托对象,并通过构造函数添加SayHiCN方法 dg_SayHi objSayHi = new dg_SayHi(SayHiCN); //向委托对象中 "添加" 一个方法 objSayHi += SayHiEN; //从委托对象中 "移除" 一个方法 objSayHi -= SayHiCN; //调用委托,委托是方法的容器 ,调用委托的时候委托里面的方法都会被调用 objSayHi(); } void SayHiCN() { MessageBox.Show("你好上海"); } void SayHiEN() { MessageBox.Show("hi shanghai"); } }
C,点击“委托”,查看效果:
D, 一张图片解释上面的运行过程:
2, 委托返回类型和添加到委托的方法的返回类型保持一致
委托可以作为参数使用,传递方法。把委托对象作为参数,委托对象是方法的容器(上图中的椭圆),这样实际上就传递了方法;上面示例我们只是在委托中添加了方法,还没有把委托作为参数传递,我们看下面的示例介绍
A, 我们有两个方法,分别是获取int数组中最大数的方法 int GetMaxNum() 和 获取int数组中最小数的方法 int GetMinNum()
/// <summary> /// 2.1 返回数组中的最大数 /// </summary> /// <returns></returns> int GetMaxNum(int[] arr) { int numMax = arr[0]; for (int i = 1; i < arr.Length; i++) { if (arr[i] > numMax) { numMax = arr[i]; } } return numMax; } /// <summary> /// 2.2 返回数组中的最小数 /// </summary> /// <returns></returns> int GetMinNum(int[] arr) { int numMin = arr[0]; for (int i = 1; i < arr.Length; i++) { if (arr[i] < numMin) { numMin = arr[i]; } } return numMin; }