• 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);
    
        }
  • 相关阅读:
    loads和dumps的用法
    python实现装饰器
    pycharm 配置 git 方法
    正则表达式——练习一
    fiddler下载安装
    robotframework引入seleniumlibrary报错
    Codeforces-936B Sleepy Game
    Codeforces-940D. Alena And The Heater
    Codeforces-935D. Fafa and Ancient Alphabet
    Java编程规范
  • 原文地址:https://www.cnblogs.com/zhuzhi0819/p/15581108.html
Copyright © 2020-2023  润新知