// 委托A
class DelegateA
{
// 委托,一个类型,可以赋值一个方法的引用
// 定义
delegate void Tool(int x);
delegate long ToolLong(long x, long y);
delegate string GetString();
public void Delegate()
{
// 赋值
Tool tool = null;
ToolLong toollong = null;
int x = 12;
GetString getString1 = x.ToString;
GetString getString2 = new GetString(x.ToString);
// 使用:将方法传递给委托,需要参数一一对应
tool = Test;
tool(100); // 我是委托:100
if (toollong != null) // 安全检测
{
toollong(100, 12); // 异常
}
Console.WriteLine(getString1()); // 12
Console.WriteLine(getString2()); // 12
}
public void Test(int x)
{
Console.WriteLine("我是委托:"+x);
}
}
// 委托B
class DelegateB
{
public static double MultiplayByTwo(double value)
{
return value * 2;
}
public static double Square(double value)
{
return value * value;
}
}
// 主函数调用
static void Main(string[] args)
{
// 委托delegateA
DelegateA delegaA = new DelegateA();
delegaA.Delegate();
// 委托delegateB
// 委托类型数组和当做参数使用
DoubleOpDelegate[] operations = { DelegateB.MultiplayByTwo, DelegateB.Square }; // 将委托当数组使用
foreach (DoubleOpDelegate op in operations) // 遍历委托
{
// Console.WriteLine(op(6)); // 12 36
ProcessAndDisplayRes(op, 4); // result:8 result:16
}
}
delegate double DoubleOpDelegate(double x); // 定义委托
static void ProcessAndDisplayRes(DoubleOpDelegate op,double value)
{
double result = op(value);
Console.WriteLine("result:" + result);
}