2008年11月27日 星期四

何謂「委派(Delegate)?」(11.27)

委派(Delegate):
  1. 委派就如中文表面的意思一樣,就是將我們定義好的方法,透過委派的物件,來執行該方法。
  2. 在我們一般寫程式時,也許甚少會用到委派的東西,但,若你在開發一些共用元件,需要提供方法、事件讓別人使用時,就應該要透過委派來達到安全性及共用性。
範例:

//以下是一個四則運算的簡單範例


    delegate int arithmetic(int num1, int num2); //定義委派類型


    protected void Page_Load(object sender, EventArgs e)
    {
        //先宣告委派
        arithmetic ari=null;

        //設定算術原則
        string fun="/";

        switch (fun)
        {
            //依照fun所給的算術原則,將該算術原則的方法,指派給「ari」
            case "+":
                ari = new arithmetic(this.add);
                break;
            case "-":
                ari = new arithmetic(subtract);
                break;
            case "*":
                ari = new arithmetic(multiply);
                break;
            case "/":
                ari = new arithmetic(divide);//實作委派
                break;
                //(這些方法,必須也要跟定義委派類型的是相同的喲。

就是說,也必須有回傳int,及有兩個數值參數。)
        }

        int ccc = ari(6, 3);//這時候,只要統一用「ari」就可以呼叫對應的方法了。

    }


    private int add(int a,int b)
    {
        //加
        return a + b;
    }

    private int subtract(int a, int b)
    {
        //減
        return a - b;
    }

    private int multiply(int a, int b)
    {
        //乘
        return a * b;
    }

    private int divide(int a, int b)
    {
        //除
        return a / b;
    }



另外,委派也有「組合」的功能,可以將數個方法,一起組合起來,依序執行。
例:
ari += new arithmetic(this.add);
ari += new arithmetic(this. subtract);

如此的話,程式便會先執行「add」完後,接著執行「subtract」。另外,有了「+」,也可有「-」

ari += new arithmetic(this.add);
ari += new arithmetic(this. subtract);
ari -= new arithmetic(this.add);

經過了「-」的動作,原本加上的「add」方法,又被移除了,於是就只會執行「subtract」而已。


1 則留言:

匿名 提到...

感謝教學XD 找好久終於 有看懂得了
感謝萬分