標籤:des style blog http color io os ar 使用
- 命名函數
- 匿名方法
- lambda運算式
委託是一種可以把引用儲存為函數的類型,定義了委託後,就可以聲明該委託類型的變數,接著把這個變數初始化為與委託有相同傳回型別和參數列表的函數引用,之後就可以使用委託變數調用這個函數,就像是該變數是一個函數一樣,有了引用函數的變數後,還可以執行不能用其他方式完成的操作,例如可以把委託變數作為參數傳遞給一個函數,這樣該函數就可以使用委託調用它引用的任何函數,而且在運行之前無需知道調用的是哪個函數。
using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks;namespace CSharpRumenJD{ class Program { delegate void ProcessDelegate(int num); static void ShowDouble(int num) { num *= 2; Console.WriteLine(num); } static void ShowThree(int num) { num *= 3; Console.WriteLine(num); } static void ShowFour(int num) { num *= 4; Console.WriteLine(num); } /// <summary> /// 這裡把委託作為參數傳遞給函數, /// </summary> /// <param name="pro"></param> /// <param name="num"></param> static void Excute(ProcessDelegate pro, int num) { pro(num); } static void Main(string[] args) { ProcessDelegate pro = null; string input = Console.ReadLine(); if (input == "D") pro += ShowDouble; //關聯函數的第一種方法 else if (input == "F") pro = ShowFour; //關聯函數的第二種方法 else pro = new ProcessDelegate(ShowThree);//關聯函數的第三種方法 Excute(pro, 1); Console.ReadKey(); } }}
代碼裡展示了委託關聯命名方法的三種基本方式
其中+=可實現累積關聯連續關聯的效果,就是說多次調用+=,委託關聯的方法會按照順序依次調用所有關聯的方法;
C# 2.0以前,使用命名的方法是對委託進行執行個體化的唯一方式。但是在C#2.0以後的版本中,在建立新方法的系統開銷不必要時,允許您對委託進行執行個體化,並立即指定委託將在被調用時處理的代碼塊。
這些被稱為匿名方法,
Lambda 運算式執行個體化委託:
參考資料:
淺談C#中常見的委託
C#中委託演變的的三個階段