C#中委托演變的的三個階段
委托是一種可以把引用存儲為函數的類型,定義了委托後,就可以聲明該委托類型的變量,接著把這個變量初始化為與委托有相同返回類型和參數列表的函數引用,之後就可以使用委托變量調用這個函數,就像是該變量是一個函數一樣,有了引用函數的變量後,還可以執行不能用其他方式完成的操作,例如可以把委托變量作為參數傳遞給一個函數,這樣該函數就可以使用委托調用它引用的任何函數,而且在運行之前無需知道調用的是哪個函數。
復制代碼
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以後的版本中,在創建新方法的系統開銷不必要時,允許您對委托進行實例化,並立即指定委托將在被調用時處理的代碼塊。
這些被稱為匿名方法,