委派是型別安全的函式指標,用於將方法作為參數傳遞。本文涵蓋委派宣告、具名/匿名方法實例化、策略模式範例、多播委派概念。
using System;
namespace gosoa.com.cn
{
public class test
{
// 宣告委派:回傳 string,無參數
public delegate string GetAString();
public static void Main()
{
int x = 10;
// 實例化委派,綁定 x.ToString 方法
GetAString firstString = new GetAString(x.ToString);
Console.WriteLine(firstString()); // 呼叫委派,等同 x.ToString()
}
}
}
delegate 關鍵字。C# 2.0 引入,直接在委派實例化處撰寫方法主體。
using System;
namespace gosoa.com.cn
{
public class test
{
delegate string GetUrl(string val);
static void Main(string[] args)
{
string domain = "www.gosoa.com.cn";
GetUrl url = delegate(string param)
{
param = "https://" + param;
return param;
};
Console.WriteLine(url(domain)); // https://www.gosoa.com.cn
}
}
}
using System;
namespace gosoa.com.cn
{
class NumberOperation
{
public static double NumOne(double x) { return x * 2; }
public static double NumTwo(double x) { return x * x; }
}
public class delegateTest
{
delegate double DoubleOperation(double x);
static void PrintNumber(DoubleOperation dp, double x)
{
double result = dp(x);
Console.WriteLine("value is {0}, result of DoubleOperation is {1}:", x, result);
}
static void Main()
{
DoubleOperation doption = new DoubleOperation(NumberOperation.NumOne);
PrintNumber(doption, 1.5); // value is 1.5, result is 3
doption = new DoubleOperation(NumberOperation.NumTwo);
PrintNumber(doption, 3.2); // value is 3.2, result is 10.24
}
}
}
using System;
namespace gosoa.com.cn
{
public class delegateTest
{
delegate double DoubleOperation(double x);
static void PrintNumber(DoubleOperation dp, double x)
{
double result = dp(x);
Console.WriteLine("value is {0}, result of DoubleOperation is {1}:", x, result);
}
static void Main()
{
DoubleOperation doptionOne = delegate(double x) { return x * 2; };
DoubleOperation doptionTwo = delegate(double x) { return x * x; };
PrintNumber(doptionOne, 1.5);
PrintNumber(doptionTwo, 3.2);
}
}
}
+=),依序呼叫 (-= 移除)。ThreadStart 委派。BeginInvoke/EndInvoke。=> 本質為委派/運算式樹。