一、委托
當我們需要把方法做為參數傳遞給其他方法的時候,就需要使用委托。
因為有時候,我們要操作的對象,不是針對數據進行的,而是針對某個方法進行的操作。
我們還是來以代碼入手
using System;
namespace gosoa.com.cn
{
public class test
{
public delegate string GetAString();
public static void Main()
{
int x=10;
GetAString firstString=new GetAString(x.ToString);
Console.WriteLine(firstString());
//上句和下面這句類似。
//Console.WriteLine(x.ToString());
}
}
}
在上例中,public delegate string GetAString(); 就是聲明了一個委托(delegate),其語法和方法 的定義類似,只是沒有方法體,前面要加上關鍵字 delegate 。定義一個委托,基本上是定義一個新類, 所以,可以在任何定義類的地方,定義委托。
注意,在C#中,委托總是自帶一個有參數的構造函數,這就是為什麼在上例中,GetAString firstString=new GetAString(x.ToString); 通過這句初始化一個新的delegate的時候,給傳遞了一個 x.ToString 方法。但,在定義delegate的時候,卻沒有定義參數。
在看另一個例子之前,我們先來了解下匿名方法。
匿名方法的使用,我們看個例子
using System;
namespace gosoa.com.cn
{
public class test
{
delegate string GetUrl(string val);
static void Main(string [] args)
{
string domin="www.gosoa.com.cn";
GetUrl url=delegate(string param)
{
param="http://"+param;
return param;
};
Console.WriteLine(url(domin));
}
}
}