前文:
成為.Net高手Delegate
是必備武器之一
今天小弟和大家分享我所認知的Delegate
一開始我們先來看看Delegate
到底是不是類別
範例解說:
宣告一個 voidDelegate
委託
1 | public delegate void voidDelegate(); |
執行結果:Yes 委託是一個特別的類別
但委託物件方式很特別 他在宣告時必須傳入[建構子參數] 而建構子參數是[方法]
我們宣告一個委託 傳入兩個Int參數 回傳Int
public delegate int calcInt(int arg1,int arg2);
使用如下 new 一個 calcInt
並傳入建構子參數 add方法 之後就可以把calcint
當作方法來使用
1 | calcInt calcint = new calcInt(add); |
或是
使用.net提供的 語法糖 如下
1 | calcInt calcint1 = (a,b) => { return a + b; }; |
編譯器會動態幫我們產生一個方法。
委託就這樣嗎?!
進階的用法
第一 : 宣告一個類別[計算者],建構子參數是一個泛行List
在類別中宣告Calc委託,在Excute方法中我們直接回傳執行Calc結果
1 | public class Calculator<T> |
使用方法如下:
宣告一個物件Calculator傳入建構子參數List
重點:我們可以在Client端決定如何使用此方法
1 | List<int> i_List = new List<int>() |
總結:如上面程式碼 我們可在Client
中決定對List
集合做操作(加,減,乘,除) ,而不是一開始就寫死在類別中,降低了類別方法和Client
的耦合
Delegate
可以把方法實作的權利移交給Clinet
端
原始碼範例
此文作者:Daniel Shih(石頭)
此文地址: https://isdaniel.github.io/c-func-1/
版權聲明:本博客所有文章除特別聲明外,均採用 CC BY-NC-SA 3.0 TW 許可協議。轉載請註明出處!