標籤:異常 輸出參數 聲明 參數 引用 bsp 補充 有序 void
1、什麼是委託
委託可以認為是包含具有相同簽名和傳回值類型的有序方法的對象。
2、聲明委託類型
委託是類型,和類一樣,委託類型必須在被用來建立變數以及類型的對象之前聲明。
委託中所包含的方法必須與聲明委託的傳回值類型、簽名相同。
例:delegate void HelloWord(string name);
委託型別宣告與方法有兩個不同:1以關鍵字delegate開頭,沒有方法主體“;”代替。
3、建立委派物件
委託是參考型別,因此有引用和對象。在委託型別宣告之後,可以聲明變數並建立類型的對象。
委託類型名 變數 方法
HelloWord chinese = Chinese;
HelloWord chinese = new HelloWord(Chinese);
方法可以使執行個體方法或靜態方法都可以。
Program pro = new Program();
HelloWord english = pro.English;
4、賦值委託
由於委託是參考型別,我們可以通過賦值來改變包含在委託變數中的引用。
例:HelloWord chinese = Chinese;
HelloWord chinese = Chinese2;//上一個委託會被銷毀
5、組合委託
委託可以使用運算子來組合建立新的委託。
HelloWord ChineseAndEnglish = chinese + english;
6、委託增加方法
HelloWord chinese += pro.English;
增加方法實際上是產生了一個新的委託,其調用列表是左邊的委託加上右邊的方法的組合。
方法是加在調用方法列表的最底部。
7、委託移除方法
HelloWord chinese -= pro.English;
和增加方法一樣也是產生了一個新的委託,新的委託是舊的委託的副本,只是沒有了被移除方法的引用。
移除委託的注意事項:
-=運算子從列表最後開始搜尋並移除一個匹配的方法;
試圖刪除不存在方法沒有效果;
試圖刪除空委託會拋出異常;
可以把委託和null比較判斷委託的調用列表是否為空白,為空白則為null;
8、調用委託
用於調用委託的參數會被調用與列表的每一個方法(除非有一個參數是輸出參數)
一個方法可以在列表中出現多次,每次調用到方法時都會被調用一次。
delegate void HelloWord(string name); class Program { static void Chinese(string name) { Console.WriteLine("你好:" + name); } void English(string name) { Console.WriteLine("Hello:" + name); } static void Main(string[] args) {
HelloWord chinese = Chinese; Program pro = new Program();
HelloWord english = pro.English; chinese("小明"); english("Alex"); } }
後面的慢慢補充。
C#委託初學