zoukankan      html  css  js  c++  java
  • 委托--------------------------------c#

    1.先来一个简单的委托写法,为的是访问一个类中的私有成员。。。。稍微拓展一下,也可以变成回调方法的内部代码。

      class Program
        {
            static void Main(string[] args)
            {
                //调用委托,访问私有成员
                Methods m = new Methods();
                m.f("你好");
            }
        }
    
        //定义一个简单的委托类型
        public delegate bool Feedback(string s);
    
        class Methods
        {
            //初始化一个委托
            public Feedback f;
            public Methods()
            {
                //用委托包装改方法
                f = new Feedback(writepaper);
            }
    
            //这个方法是私有的
            private bool writepaper(string s)
            {
                Console.Write(s);
                 return true;
            }
    
        }

     2.回调方法

     //定义一个简单的委托类型
        public delegate bool Feedback(string s);
        class Program
        {
            //这就是回调
            Feedback callback;
            static void Main(string[] args)
            {
                Program p = new Program();
                //定义回调的方法,调用的是method中的writepaper方法
                p.callback = new Feedback(Methods.writepaper);
                //这相当于系统的invoke
                p.involke(1,p.callback);
                Console.ReadKey();
            }
    
            //用这个名字定义方法,看起来更熟悉
            //它可以类比与系统的invoke方法
            public void involke(int i ,Feedback fb)
            {
                Console.WriteLine(i.ToString());
                fb((i+3).ToString());
            }
        }
    
        class Methods
        {  
            public static bool writepaper(string s)
            {
                Console.Write(s);
                 return true;
            }
    
        }

     3.委托链

     //定义一个简单的委托类型
        public delegate bool Feedback();
        class Program
        {
        
            Feedback callback;
            static void Main(string[] args)
            {
                Feedback f1 = new Feedback(Methods.writepaper1);
                Feedback f2 = new Feedback(Methods.writepaper2);
                Feedback f3 = new Feedback(Methods.writepaper3);
                //委托链
                Feedback fbchain = null;
                //即使fbchain是null也没关系,也一样想委托链中添加委托
                fbchain = (Feedback)Delegate.Combine(fbchain,f1);
                fbchain = (Feedback)Delegate.Combine(fbchain, f2);
                fbchain = (Feedback)Delegate.Combine(fbchain, f3);
                //调用委托链,经测试,委托链中的委托是同步调用的,想要异步,就要自己去写方法了
                fbchain();
    
                //删除链中的一个委托
                fbchain = (Feedback)Delegate.Remove(fbchain, f3);
                fbchain();
    
            }
    
       
        }
    
        class Methods
        {  
            public static bool writepaper1()
            {
                Console.WriteLine("1");
                Console.ReadKey();
                 return true;
            }
    
            public static bool writepaper2()
            {
                Console.WriteLine("2");
                Console.ReadKey();
                return true;
            }
            public static bool writepaper3()
            {
                Console.WriteLine("3");
                Console.ReadKey();
                return true;
            }
        }

    4.Func。。。。。。泛型委托,

          //该委托的不论在<>中有几个类型,,最后一个类型必然是返回类型,前面所有的都是参数类型
              Func<bool, int> f = (n) => { n = false;return 1;  };
    
                Console.WriteLine(f(false));
                Console.ReadKey();
  • 相关阅读:
    华硕笔记本无法U盘启动,快捷键识别不了
    怎么将uefi改成legacy启动|BIOS设置legacy引导模式的方法
    [CDLinux]制作U盘CDLinux系统启动盘
    重装系统时,将MBR分区转为GPT 分区
    5-Comments
    4-HTML Computer Code Elements
    3-html 缩写-地址-文字方向-引用块-题注的格式
    2-HTML Text Formatting Elements
    1-HTML Attributes
    LabVIEW--为设备添加配置文件.ini
  • 原文地址:https://www.cnblogs.com/xiaoleye/p/4928902.html
Copyright © 2011-2022 走看看