示例:MyDel类型参考上面的定义
MyDel del = object.FuncA; //创建并初始化委托对象
del += object.FuncB; //增加方法
del += object.FuncC; //增加方法
//调用委托
del(55);
参数55会在调用委托对象时依次传递给保存的方法
一个完整的委托示例代码
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace CodeForDelegate
{
class Program
{
//定义委托类型
delegate void PrintFunction(string txt);
//测试类中定义三个方法
class Test
{
public void PrintA(string txt)
{
Console.WriteLine("printA:{0}", txt);
}
public void PrintB(string txt)
{
Console.WriteLine("printB:{0}", txt);
}
public static void PrintC(string txt)
{
Console.WriteLine("printC:{0}", txt);
}
}
static void Main(string[] args)
{
Test test = new Test();
PrintFunction pf;
//实例化并创建委托对象
pf = test.PrintA;
//为委托对象增加方法
pf += test.PrintB;
pf += Test.PrintC;
pf += test.PrintA; //添加一个重复的方法
//通过与null比较,确认委托对象中保存了方法
if (pf != null)
pf("Hello");
else
Console.WriteLine("pf是个空委托!");
Console.ReadKey();
}
}
}
调用带有返回值的委托
如何委托有返回值,并且调用列表中有一个以上的方法,那么将使用最后一个方法的返回值,之前方法的返回值被忽略
示例:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace CodeForDelegate
{
class Program
{
//定义委托类型
delegate int DelFunction();
//测试类中定义三个方法
class Test
{
int IntValue = 0;
public int FuncA()
{
return IntValue += 1;
}
public int FuncB()
{
return IntValue += 10;
}
}
static void Main(string[] args)
{
Test test = new Test();
DelFunction df;
df = test.FuncA;
df += test.FuncB;
//最终返回值的是11
if (df != null)
Console.WriteLine("返回值:"+df());
else
Console.WriteLine("pf是个空委托!");
Console.ReadKey();
}
}
}










