close

一、使用時機:

當撰寫一個class裡面需要呼叫該class無法呼叫到的函式的時候,就會需要用到委派

 

二、使用方法:

    class Mouse
    {
        private string name;
        public Mouse(string name)
        {
            this.name = name;
        }
        public string Name
        {
            set { name = value; }
            get { return name; }
        }
        public string Run()
        {
            return "我是" + Name + ",貓來了 快跑!";
        }
        public string Help()
        {
            return "我是" + Name + ",貓來了,救命啊!";
        }
    }


    class Cat
    {
        private string name;

 

        //1.EventDelegate是一個型別,此型別的參考變數將指向一個無傳入參數,回傳string的方法


        //2.宣告有一個委派叫EventDelegate,他到時候要呼叫一個「沒傳入參數的函式,然後這函式的回傳值是string(的方法)」


        public delegate string EventDelegate(); //1.宣告委託

 

        // shoutDelegate 是一個變數,它可以指向一個無傳入參數且回傳為string的方法


        public EventDelegate shoutDelegate; // 2.宣告事件變數 //產生委託物件的參考  


        public Cat(string name)
        {
            this.name = name;
        }
        public string Name
        {
            set { name = value; }
            get { return name; }
        }
        public string Shout()
        {
            string str = "我是"+Name+"!喵~"+'\n';
            if (
shoutDelegate != null)
            {
                str = str + shoutDelegate();
                return str;
            }
            else return "(null)";
        }
    }


    class Program
    {
        static void Main(string[] args)
        {
            Cat cat = new Cat("咪咪");
            Mouse mouse = new Mouse("米奇");

cat.shoutDelegate =

new Cat.EventDelegate(mouse.Run); // 4. 將方法綁到事件變數中

 

//不懂的是:這裡沒呼叫cat.Shout() , 卻會出現: 「我是咪咪!喵~」? 好怪喔!

//不過這裡有呼叫mouse.Run 所以會出現: 我是米奇,貓來了 快跑!

 

            Console.WriteLine("{0}",cat.Shout());
            Console.Read();
        }
    }

執行結果:

 

arrow
arrow
    全站熱搜
    創作者介紹
    創作者 SU SU 的頭像
    SU SU

    SU SU的部落格

    SU SU 發表在 痞客邦 留言(0) 人氣()