Пример #1
0
        static void Main(string[] args)
        {
            //------------------------------------------------------------------------------法1
            //DelSayhi del=new DelSayhi (SayhiChinese );
            //☆☆☆☆☆☆☆☆☆☆☆☆注意函数名直接赋值给委托,不需要在函数名之后加括号
            //Sayhi("张三", del);
            //委托就是为把一个函数当参数,但这样不明显


            //------------------------------------------------------------------------------法2
            //可以直接把一个函数给委托
            //DelSayhi del = SayhiChinese;
            //☆☆☆☆☆☆☆☆☆☆☆☆☆注意函数名直接赋值给委托,不需要在函数名之后加括号
            //Sayhi("张三", del);


            //------------------------------------------------------------------------------法3
            //既然可以法2 ,那干脆直接如下,这样你就可以发现函数作为了参数
            //Sayhi ("张三", SayhiChinese);

            //------------------------------------------------------------------------------多播委托
            //委托可以将多个方法赋给同一个委托,或者叫将多个方法绑定到同一个委托,
            //这就是---多播委托
            //当调用这个委托的时候,将依次调用其所绑定的方法。在这个例子中,语法如下
            //DelSayhi del=new DelSayhi (SayhiChinese );
            //del += SayhiEnglish;//使用+=给此委托变量再绑定一个方法
            //Sayhi("张三", del);


            //-------------------------------------------------------------------------------取消绑定
            //既然给委托可以绑定一个方法,
            //那么也应该有办法取消对方法的绑定,很容易想到,这个语法是“-=”:
            //DelSayhi del = new DelSayhi(SayhiChinese);
            //del += SayhiEnglish;//使用+=给此委托变量再绑定一个方法
            //Sayhi("张三", del);

            //del -= SayhiChinese;//使用-=给此委托变量取消绑定一个方法
            //Sayhi("张三风", del);


            //不使用SayHi函数,在新建了了委托对象后直接使用委托作函数
            //注:当然我们知道可以在这里直接使用SayhiChinese和SayHiEnglish俩个函数,我们在这里就是举例子
            DelSayhi del = new DelSayhi(SayhiChinese);

            if (null != del)//注意调用委托的时候一定要先判断委托是否为空,为空时会抛异常
            {
                del("张三");
            }

            Console.ReadKey();
        }
Пример #2
0
        static void Main(string[] args)
        {
            //从项目01委托定义中,我们知道新建委托对象直接做函数
            //DelSayhi del = new DelSayhi(SayhiEnglish);//简写为DelsayHi del=SayHiEnglish;
            //del("张三");

            //那我们是不是可以直接结合匿名函数,把 SayhiChinese和SayhiEnglish直接省略,
            //在新建委托对象时建立一个相同功能的匿名函数
            //注意匿名函数的参数类型和个数,返回值必须和委托一样
            //DelSayhi del = delegate(string name) {  Console.WriteLine("Hello" + name); };
            //del("张三");
            //Console.ReadKey();


            //使用Lambda语句赋值委托
            DelSayhi del = (string name) => { Console.WriteLine("Hello" + name); };

            del("张三");
            Console.ReadKey();
        }
Пример #3
0
        static void Main(string[] args)
        {
            // DelSayhi del = SayHiTaiwanese;
            // del("ABC");

            // Test("台灣",SayHiTaiwanese);
            // Test("Yo", delegate (string name)
            // {
            //     System.Console.WriteLine("吃飯沒" + name);
            // });
            // DelSayhi del = delegate (string name)
            // {
            //     System.Console.WriteLine("你好" + name);
            // };
            // del("Alex");

            DelSayhi del = (string name) => { System.Console.WriteLine("你好" + name); };

            del("Amy");
        }
Пример #4
0
 /// <summary>
 ///这个函数就是为了把下面两个函数SayhiChinese和SayhiEnglish统一起来
 ///我想在这个函数中调用这两个函数,也就是有一个函数作为参数,但具体哪一个不确定
 ///所以我定义了一个委托DelSayhi指向这两个函数
 /// </summary>
 /// <param name="name"></param>
 public static void Sayhi(string name, DelSayhi del)
 {
     del(name);
 }