C# 委托

一.委托的概念

委托是用户自定义的类,它定义了方法的类型。储存的是一系列具有相同参数和返回类型方法的地址列表,调用委托时,此委托列表的所有方法都将被执行。

二.委托类型的定义

委托类型必须在被用来创建变量以及类型对象之前声明。

委托类型的声明:

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);

    }

 

posted @ 2021-11-20 14:11  朱志  阅读(500)  评论(0编辑  收藏  举报