using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
//使用委托方式之一:把方法組合到一個數組中,再循環中調用不同的方法
namespace Delegate
{
delegate double DoubleOp(double x);//一旦定義了委托類,就可以執行個體化它的執行個體,像處理一般的類那樣
class Program
{
static void Main(string[] args)
{
DoubleOp[] opertions = {new DoubleOp(MathsOperations.MultiplyByTwo),//每一個元素都初始化為由MathOperations 類執行的不同操作(封裝方法)
new DoubleOp(MathsOperations.Square)
};
for (int i = 0; i < opertions.Length; i++)
{
Console.WriteLine("Using operations[{0}]:",i);
ProcessAndDisplayNumber(opertions[i], 2.0);//将委托傳遞給ProcessAndNumber() 方法,僅傳遞委托名,但不帶任何參數
ProcessAndDisplayNumber(opertions[i], 7.94);//operation[i]表示“這個委托”,也即;委托代表的方法
ProcessAndDisplayNumber(opertions[i], 1.414);//operation[i](2.0) 表示“調用這個方法,參數放在括号中”
Console.ReadLine();
}
}
/// <summary>
/// 把一個委托作為其第一個參數
/// </summary>
/// <param name="action"></param>
/// <param name="value"></param>
static void ProcessAndDisplayNumber(DoubleOp action,double value)
{
double result = action(value);//調用action委托執行個體封裝的方法,其傳回結果存儲在result 中
Console.WriteLine("Value is{0},result of operation is {1}",value ,result );
}
/// <summary>
/// 委托要調用的兩個方法
/// </summary>
class MathsOperations
public static double MultiplyByTwo(double value)
return value * 2;
public static double Square(double value)
return value * value;
}
}