原則:
1.委託本質就是個指針,一個函數指針,拿到函數的首地址即可;
C#的委託加了安全性,體現在函數指標所引用的函數指令區塊的型別檢測,例如回傳值,參數型,參數個數
而C中的函數指標被賦值的時候(在C#中,就是委託實例化的時候,因為C#中後台將委託處理成一個類別了,封裝了哈)被賦予的值是否滿足類型的種種條件(返回值,參數類型,參數個數)不做檢查,由使用者給保證,C#會編譯提示出來
2.委託實例化的過程,也就是委託物件建構的過程,從底層來講,即將一個現存的函數程式碼指令塊的記憶體位址(靜態函數,實例的非靜態成員函數都行)賦值給這個委託;這個賦值過程,就是委託的建構函式要做的事情,所以,委託的建構子一定有一個參數,這個參數在後台讓系統處理,就是滿足型別檢查的函式指針,所要檢查的型別(回傳值,參數類型,參數個數)都是在聲明定義委託的時候給出的。
3.委託實例化的兩種方法:
1) A a = new A(靜態方法名/實例.方法名);
2) A a = 靜態方法名/實例.方法名;
委託呼叫的兩種方法:
1)a.Invoke()
2)a()
用來建構委託的方法可以是靜態方法,也可以是實例化物件的成員函數,本質是這段程式碼指令已經編譯出來,分配了記憶體了,傳遞給委託的參數(本質就是這塊指令資料的首位址)是有效的有意義的,從這個角度來理解,自然靜態方法,實例方法都能用來建構、建立委託實例的了