浅谈C#中的委托
在c++中被稱為安全的函數指針,c#中叫做委托,簡單理解就是把一個方法作為參數傳到另一個方法中;
委托,是一個類靜態(?static?Delegete),繼承自multicaseDeletgete(多路廣播委托),事實上它不是把一個方法中的方法體直接傳到另一個方法中,而是把方法的指針放到了委托對象中,執行委托就執行了清單中的方法
1,定義一個委托:訪問修飾符?void?Delegete?委托對象名(參數列表)
一個方法要想放到委托對象中,就必須符合委托對象定義的格式.
每個委托對象中有兩個主要的變量:Internal?Intptr_method和一個obj類型的數組;
只有當第一次調用委托時,就把方法的指針放到??Internal?Intptr_method中,構造函數調用委托對象的時候,執行此方法;
obj數組里放的就不是指針了,而是委托對象,當追加一個方法的時候,先把方法編譯成一個委托對象,然后存放到這個數組中;
委托中關于+=和-=的問題:
+=是一種語法糖,編譯成了combine方法,這個方法有兩個參數,委托容器,和委托對象,功能就是把委托對象放到委托容器中,每次+=的時候都把方法放到委托容器中,返回值是一個Delegete類型,每次+=就把上次的委托類型對象覆蓋掉,這時委托對象中的數組的長度是上次的長度+1,所以不用考慮這個數組的長度.
調用委托時:
簡單的寫法是直接寫??委托變量();
其實這種寫法在編譯時編譯成了委托變量的invoke方法.
轉載于:https://www.cnblogs.com/helloworldbby/archive/2012/10/07/2714354.html
總結
- 上一篇: java Map 怎么遍历
- 下一篇: 学英语不必太在意单词