2015年11月18日 星期三

C14_1 委派

using System;
namespace C14_1
{
    ///
    ///定義委派,可以代表的方法的類型
    ///
    ///EnglishGreeting或者ChineseGreeting
    public delegate void DoGreeting(string name);
    public class Program
    {
        private static void EnglishGreeting(string name)
        {
            Console.WriteLine("Hello, "+ name);
        }
        private static void ChineseGreeting(string name)
        {
            Console.WriteLine("你好,"+ name);
        }
         ///
    ///他接收一個DoGreeting 型別的方法做為參數
    ///
    ///World 名稱
    ///委派(EnglishGreeting 或者 ChineseGreeting)
        private static void GreetHello(string name, DoGreeting MakeGreeting)
        {
            MakeGreeting(name);
        }
        public static void Main()
        {
            GreetHello("Jim", EnglishGreeting);
            GreetHello("小王", ChineseGreeting);

            DoGreeting eng, chi;
            eng = EnglishGreeting;
            chi = ChineseGreeting;
            GreetHello("AAA",eng);
            GreetHello("小小",chi);

            DoGreeting d;
            //先給委派型別的變數繫結一個方法
            d = EnglishGreeting;
            //給委派變數在繫結一個方法
            d += ChineseGreeting;
            //將先後叫用 EnglishGreetin 與 ChineseGreeting 方法
            GreetHello("小小王",d);

            d("286王");

            DoGreeting d1 = new DoGreeting(EnglishGreeting);
            //給此委派變數在繫結一個方法
            d1 += ChineseGreeting;
            d1("老王");

            DoGreeting d2 = new DoGreeting(EnglishGreeting);
            d2 += ChineseGreeting;
            GreetHello("JimD2",d2);
            Console.WriteLine("--------------------------");
            //取消EnglishGreeting方法的繫結
            d2 -= EnglishGreeting;
            //將僅用ChineseGreeting方法
            GreetHello("小小明D2",d2);


        }
    }
 
}

沒有留言: