一.委托的概念
委托是用户自定义的类,它定义了方法的类型。储存的是一系列具有相同参数和返回类型方法的地址列表,调用委托时,此委托列表的所有方法都将被执行。
二.委托类型的定义
委托类型必须在被用来创建变量以及类型对象之前声明。
委托类型的声明:
1.以delegate关键字开头。
2.返回类型+委托类型名+参数列表
delegate void MyDel(int a)
二.把方法当作参数在另一个方法中传递或调用
namespace Func { public delegate int MyDel(int num);//声明一个自定义委托 class Program { static int Add1(int a) { int b = 10 + a; Console.WriteLine("——Add1———"); return b; } static int Add2(int a) { int b = 10 - a; Console.WriteLine("——Add2———"); return b; } static void Calculate(MyDel ex, int a) { var result = ex(a); Console.WriteLine(result + "\n"); } static void Main(string[] args) { Calculate(Add1, 1); Calculate(Add2, 10); Console.ReadKey(); } } }
三.委托的加减运算
可以使用+=运算符,为委托新增方法。
同样可以使用-=运算符,为委托移除方法。
当委托列表中有几个方法时,调用委托时,则会依次经过各个方法,并返回列表最后一项方法的结果。
namespace Func { public delegate int MyDel(int num);//声明一个自定义委托 class Program { static int Add1(int a) { int b = 10 + a; Console.WriteLine("——Add1———"); return b; } static int Add2(int a) { int b = 10 - a; Console.WriteLine("——Add2———"); return b; } static void Calculate(MyDel ex, int a) { var result = ex(a); Console.WriteLine(result + "\n"); } static void Main(string[] args) { //Calculate(Add1, 1); //Calculate(Add2, 10); MyDel myDel = Add1; myDel += Add2; Calculate(myDel, 10); Console.ReadKey(); } } }
四.委托回调
//静态类 public static class EmrContext { public delegate Dictionary<string, string> ShuaXin(string key); /// <summary> ///疾病编码集合 /// </summary> public static Dictionary<string, string> DiseaseDic = new Dictionary<string, string>(); public static ShuaXin onShuaXin; } public partial class EditorPadForm : UserControl { //等待回调 EmrControl1.SetICDShuaXinAction((string key)=> { Dictionary<string, string> Dic = new Dictionary<string, string>(); Dic.Add("A001", "测试"); return Dic; }); } public partial class EditorPadForm : UserControl { public void SetICDShuaXinAction(EmrContext.ShuaXin onaction) { EmrContext.onShuaXin = onaction; } } //搜索界面 输入key public class InputText: Form { //回调了 然后赋值了 EmrContext.DiseaseDic = EmrContext.onShuaXin?.Invoke(KeyLike); }