關於部落格
  • 4876

    累積人氣

  • 0

    今日人氣

    0

    追蹤人氣

[引用] delegate 委派



原文url: 
http://blog.xuite.net/autosun/study/32614006-%5BC%23%5D+%E4%BA%8B%E4%BB%B6%E8%88%87%E5%A7%94%E6%B4%BE%EF%BC%88Delegate%EF%BC%89

一、何謂 Delegate

   各位都清楚 C/C++ 的函式指標(function pointer),函式指標提供了開發者相當大的彈性,尤其在於功能選單實作,開發者可藉由改變指標指向的函式,輕鬆又漂亮地做出效果,不過函式指標也是 C++ 程式開發中很容易出錯的一環,一個最簡單的情況:函式指標也許在執行過程中指向了不正確的位置、或是在尚未指定任何函式前就先行呼叫函式指標。Delegate 則具備 type-safe、secure managed 的特性,以確保 delegate 指向存在的函式(方法),若在 delegate 尚未存放任何方法即進行呼叫,則 CLR 會拋出一個例外狀況。

  更精準來說:Delegate 是 C# 的特殊型別,用來定義方法(method/function)的 signature,delegate 的實體(instance)可以存放一或多個符合該 signature 的方法。這樣講也許還是鴨子聽雷,不如我們實際來感受一下吧!

Step 1:定義 delegate 型別

在任何類別(class)外定義一個 delegate 型別(注意關鍵字 delegate)

1 public delegate string GetSecretIngredient(int amount);

這個 delegate 可被用來建立變數,指向任何「接受一個 int 參數並且回傳 string」的方法。

Step 2:建立 delegate 實體

建立類別包含接受一個 int 參數並且回傳 string 的方法

01 class Suzanne {
02     public static string SecretMethod(int amount) {
03         return "Suzanne's method " + amount;
04     }
05     public static void Main() {
06         // 建立 delegate 實體並指向 SecretMethod
07         GetSecretIngredient MySecretMethod = new GetSecretIngredient(SecretMethod);
08         // 可改成:  GetSecretIngredient MySecretMethod = SecretMethod;
09
相簿設定
標籤設定
相簿狀態