在C#中委托是一种引用类型。
委托直接声明用于引用方法,该方法可以带返回值,也可以带各种参数。
委托类似于C、C++中的函数指针。
我们可以按照如下的格式声明一个委托类型:
public delegate void MessageDelegate(string message);
其中void表示要引用的方法没有返回值,string message表示要引用的方法带一个字符串参数,MessageDelegate表示这个声明的委托类型的名称。
接下来,让我们看个例子:
using System;
namespace ConsoleApp1
{
class Program
{
public delegate void MessageDelegate(string message);
static void Main(string[] args)
{
MessageDelegate d1 = output;
d1(“abc”);
}
static void output(string message)
{
Console.WriteLine(message);
}
}
}
在上述例子中我们声明了一个委托类型MessageDelegate,它表示引用带一个字符串参数的方法,该方法是没有返回值的。
在类Program中存在满足这样委托条件的方法output。
于是可以定义一个变量d1为委托类型MessageDelegate,将对应的方法 output赋值给该变量d1,然后就可以用这个变量d1调用这个方法。
这就是委托的最简单的应用。
如果刚好类Program中还存在另一个满足委托条件的方法,则可以将该委托变量与这两个方法都关联,如下所示:
using System;
namespace ConsoleApp1
{
class Program
{
public delegate void MessageDelegate(string message);
static void Main(string[] args)
{
MessageDelegate d1 = output;d1 += output1;
d1(“abc”);
}
static void output(string message)
{
Console.WriteLine(message);
}static void output1(string message)
{
Console.WriteLine(message+”a”);
}
}
}
通过d1 += output1 语句将另一个满足委托条件的方法也关联到变量d1中,从而实现调用一次d1方法,就可以执行两个独立的方法, 这个叫委托的多播。
当一个委托变量关联了多个方法时,按照关联的方法的次序依次执行。
n9lanb