zoukankan      html  css  js  c++  java
  • C#之委托

    委托就是第三方,调用者告诉第三方要做什么,然后调用者就不用管了 这个委托(第三方)就会去调用方法去帮你实现
    委托的好处:

    1.相当于用方法作为另一方法参数(类似于C的函数指针)

    2.在两个不能直接调用的方法中作为桥梁,如:在多线程中的跨线程的方法调用就得用委托

    3.当不知道方法具体实现什么时使用委托,如:事件中使用委托

    先看个例子,中国人打招呼,和英国人打招呼的一般写法

            static void Main(string[] args)
            {
                SayHiChinese("Jim");
                SayHiEnglish("Jim");
                Console.Read();  
            }
            public static void SayHiChinese(string name)
            {
                Console.WriteLine("吃饭了吗 {0}",name);
            }
            public static void SayHiEnglish(string name)
            {
                Console.WriteLine("Nice to meet you {0}",name);
            }    

    再看下委托

            //定义一个委托
            public delegate void SayHi(string name);
            static void Main(string[] args)
            {
                //SayHi SHZh = new SayHi(SayHiChinese);
                SayHi SHZh = SayHiChinese;
                SHZh("Jim");
                //SayHi SHEn = new SayHi(SayHiEnglish);
                SayHi SHEn = SayHiEnglish;
                SHEn("Jim");
                Console.Read();  
            }
            public static void SayHiChinese(string name)
            {
                Console.WriteLine("吃饭了吗 {0}",name);
            }
            public static void SayHiEnglish(string name)
            {
                Console.WriteLine("Nice to meet you {0}",name);
            }

    或者

            //定义一个委托
            public delegate void SayHi(string name);
            static void Main(string[] args)
            {
                test("Jim", SayHiChinese);
                test("Jim", SayHiEnglish);
                Console.Read();
            }
    
            private static void test(string name, SayHi SH)
            {
                SH(name);
            }
    
            public static void SayHiChinese(string name)
            {
                Console.WriteLine("吃饭了吗 {0}",name);
            }
            public static void SayHiEnglish(string name)
            {
                Console.WriteLine("Nice to meet you {0}",name);
            }    

    结果都是

    匿名函数

             //定义一个委托
            public delegate void SayHi(string name);
            static void Main(string[] args)
            {
                SayHi SH = delegate (string name)
                    {
                        Console.WriteLine("你好 "+ name);
                    };
                SH("Jim");   
                Console.Read();
            }

    lamda表达式

            //定义一个委托
            public delegate void SayHi(string name);
            static void Main(string[] args)
            {
                SayHi SH = (string name) => { Console.WriteLine("你好"+name); };
                SH("Jim");
                Console.Read();
            }
  • 相关阅读:
    CSS3实现10种Loading效果(转)
    Editorial Board 、co-editor、ediitor、editor-in-chief的区别
    Android必知必会-使用okhttp的PUT方式上传文件
    Android项目开发填坑记-so文件引发的攻坚战
    Android开发学习之路--RxAndroid之操作符
    Libgdx教程目录
    Android开发学习之路--RxAndroid之lambda
    Android开发学习之路--RxAndroid之初体验
    Android必知必会-获取视频文件的截图、缩略图
    Android开发学习之路--Annotation注解简化view控件之初体验
  • 原文地址:https://www.cnblogs.com/javier520/p/10837508.html
Copyright © 2011-2022 走看看