委托和C语言中的函数指针类似,可以通过以下方式声明一个委托类型:
delegate <return type> <delegate-name> <parameter list>
//例如声明一个返回值为整型,参数为字符串类型的委托类型,该类型的名字是RecvFrameCallback
delegate int RecvFrameCallback(string s);
以下是一个简单的委托例子,可以通过改变recvFrameCallback变量的值,来调用不同的函数
using System;
namespace 委托demo
{
class Program
{
public delegate int RecvFrameCallback(string s);
static int ReadTagCallback(string s)
{
Console.WriteLine("调用了ReadTagCallback函数");
return 0;
}
static int WriteTagCallback(string s)
{
Console.WriteLine("调用了WriteTagCallback函数");
return 0;
}
static void Main(string[] args)
{
RecvFrameCallback recvFrameCallback;
//也可以使用下面的方法创建委托
//RecvFrameCallback recvFrameCallback = new RecvFrameCallback(ReadTagCallback);
//recvFrameCallback指向ReadTagCallback函数
recvFrameCallback = ReadTagCallback;
recvFrameCallback("hello");
//recvFrameCallback指向WriteTagCallback函数
recvFrameCallback = WriteTagCallback;
recvFrameCallback("hello");
//委托的多播,可以用+号让一个委托调用多个函数,当然也是可以用-号的
Console.WriteLine("委托多播测试");
recvFrameCallback = new RecvFrameCallback(ReadTagCallback) + new RecvFrameCallback(WriteTagCallback);
recvFrameCallback("hello");
Console.WriteLine("解除委托的ReadTagCallback函数");
recvFrameCallback -= new RecvFrameCallback(ReadTagCallback);
recvFrameCallback("hello");
}
}
}