據我個人理解,可以解釋為:委托是一個可以調用其它方法、事件等的架子。
委託的的聲明類似於函數,但不帶函數體,且要使用delegate關鍵字。委托的聲明指定了一個函數名,其它包含一個返類型和參數列表。
下邊做一個簡單的例字,幫助大家理解。
class Program
{
/// <summary>
/// 1、定義委托
/// </summary>
/// <param name="param1"></param>
/// <param name="param2"></param>
/// <returns></returns>
delegate double ProcessDelegate(double param1, double param2);
/// <summary>
/// 得到乘積
/// </summary>
/// <param name="param1"></param>
/// <param name="param2"></param>
/// <returns></returns>
static double Multiply(double param1, double param2)
{
return param1 * param2;
}
/// <summary>
/// 得到除數
/// </summary>
/// <param name="param1"></param>
/// <param name="param2"></param>
/// <returns></returns>
static double Divide(double param1, double param2)
{
return param1 / param2;
}
static void Main(string[] args)
{
//2、聲明一下委托變量
ProcessDelegate process;
Console.WriteLine("Enter 2 number separated with a comma:");
string input = Console.ReadLine();
int commaPos = input.IndexOf(',');
double param1 = Convert.ToDouble(input.Substring(0,commaPos));
double param2 = Convert.ToDouble(input.Substring(commaPos+1,input.Length-commaPos-1));
Console.WriteLine("Enter M to multuply or D to divide:");
input = Console.ReadLine();
if (input=="M")
{
//3、把一個函數引用賦給委托變量。
//注:須使用new 關鍵字創建一個新委托,在這個關鍵字後面,指定委託類型,提供一個函數,不帶括號
//此處將調用 Multiply()函數
process = new ProcessDelegate(Multiply);
}
else
{
process = new ProcessDelegate(Divide);
}
//4、使用委托調用函數
Console.WriteLine("Result:{0}",process(param1,param2));
Console.ReadKey();
}
}
{
/// <summary>
/// 1、定義委托
/// </summary>
/// <param name="param1"></param>
/// <param name="param2"></param>
/// <returns></returns>
delegate double ProcessDelegate(double param1, double param2);
/// <summary>
/// 得到乘積
/// </summary>
/// <param name="param1"></param>
/// <param name="param2"></param>
/// <returns></returns>
static double Multiply(double param1, double param2)
{
return param1 * param2;
}
/// <summary>
/// 得到除數
/// </summary>
/// <param name="param1"></param>
/// <param name="param2"></param>
/// <returns></returns>
static double Divide(double param1, double param2)
{
return param1 / param2;
}
static void Main(string[] args)
{
//2、聲明一下委托變量
ProcessDelegate process;
Console.WriteLine("Enter 2 number separated with a comma:");
string input = Console.ReadLine();
int commaPos = input.IndexOf(',');
double param1 = Convert.ToDouble(input.Substring(0,commaPos));
double param2 = Convert.ToDouble(input.Substring(commaPos+1,input.Length-commaPos-1));
Console.WriteLine("Enter M to multuply or D to divide:");
input = Console.ReadLine();
if (input=="M")
{
//3、把一個函數引用賦給委托變量。
//注:須使用new 關鍵字創建一個新委托,在這個關鍵字後面,指定委託類型,提供一個函數,不帶括號
//此處將調用 Multiply()函數
process = new ProcessDelegate(Multiply);
}
else
{
process = new ProcessDelegate(Divide);
}
//4、使用委托調用函數
Console.WriteLine("Result:{0}",process(param1,param2));
Console.ReadKey();
}
}