標籤:style blog http color 使用 os io 資料
一、委託(delegate):是型別安全的方法的引用。在定義委託的時候就確定了該委託所代表的方法的參數簽名和返回資料類型,因此委託是型別安全的,這一點是與指標完全不同的。
委託的使用方法與類基本相同,委託的使用分三步:1、委託聲明;2、委託執行個體化;3、委託調用。
using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks; using System.Collections;namespace ConsoleApplication{ class Program { delegate string GetString();
static void Main(string[] args) { string str="HelloWorld"; GetString dlg=new GetString(str.ToString); Console.WriteLine("str.ToString():".PadRight(20) + str.ToString()); Console.WriteLine("dlg:".PadRight(20) + dlg); Console.WriteLine("dlg():".PadRight(20) + dlg()); Console.ReadKey(); } }}
關於委託需要注意以下幾點:
①方法綁定委託時用的是方法的名稱,也就是不能帶括弧的;
②調用委託必須帶括弧;
二、Action<T> and Func<T> Delegates
這是兩種特殊的泛型委派,Action<T> 是沒有傳回值的委託,可以最少包含0個參數,最多包含16個參數;Func<T> 是帶有傳回值的委託,其中最後一個型別參數就是傳回值的類型,可以最少包含0個參數和一個傳回值,最多包含16個參數和一個傳回值。
例如:Action<int,string>
該委託所代表的方法具有兩個參數,且第一個參數類型是int類型,第二個參數類型是string類型,沒有傳回值。
Func<int,string>
該委託所代表的方法具有一個參數,且該參數的數實值型別是int類型,具有傳回值,且傳回值類型是string類型。
三、多路廣播委託(Multicast Delegates)
一個委託執行個體可以綁定單個方法,也可以綁定多個方法。綁定單個方法的委託稱為單路廣播委託(Singlecast Delegetes),綁定多個方法的委託稱為多路廣播委託(Multicast Delegates)。
委託支援+,-,+=,-=運算子,所以兩個委託可以直接進行加減運算產生新的多路廣播委託。+運算或者+=運算就是將新的方法綁定到委託,-運算或者-=就是將方法與委託解除綁定。多路廣播委託綁定的方法的執行順序與方法綁定到委託的順序相同,但是在執行過程中,如果某個方法拋出異常,那麼之後的方法將都不能被執行。如果你希望在委託綁定的方法執行過程中,即使出現異常,之後的方法也能順利執行,可以使用GetInvocationList()方法,順序執行方法,並且捕獲異常。例如下面這個例子:
static void Main() { Action d1 = One; d1 += Two; Delegate[] delegates = d1.GetInvocationList(); foreach (Action d in delegates) { try { d(); } catch (Exception) { Console.WriteLine("Exception caught"); } } Console.ReadKey(); } static void One() { Console.WriteLine("One"); throw new Exception("Error in one"); } static void Two() { Console.WriteLine("Two"); }