private void btnTest_Click(object sender, EventArgs e) { //语法糖:在C#中有很多 简洁语法,实质是由编译器 在编译时 转成 完整语法,那么这种 简洁语法叫做语法糖 //2.创建委托对象 DGTest dg = Test;//new DGTest(this.Test); /*3.为委托追加方法的本质: * 是为 被追加的方法创建一个新的委托对象,并将 方法 指针存入对象的 父类的父类(Delegate)的 IntPtr 变量中 * 然后再将 新创建的委托 添加到 当前委托对象(dg)的 数组中 */ dg += Test2; //编译后:(DGTest) Delegate.Combine(dg, new DGTest(this.Test2)); dg += Test3; //编译后:(DGTest) Delegate.Combine(dg, new DGTest(this.Test3)); dg -= Test3; //编译后:(DGTest) Delegate.Remove(dg, new DGTest(this.Test3)); /*4.调用委托,其实就是通过调用委托对象里的Invoke方法 遍历 委托内部的数组,然后依次调用 数组中的 方法 */ dg();//编译后:dg.Invoke(); /* 委托的作用: * 1.将方法做为参数 * 2.将方法作为返回值 */ }
private void btnReturn_Click(object sender, EventArgs e) { DGTest dg = InvokeTest("1"); dg(); }
/// <summary> /// 委托当参数使用: 调用 3个 Test 方法 中的某一个 /// </summary> /// <param name="strType"></param> public void InvokeTest(DGTest dgTest) { dgTest(); }