如何在C#中使用委托?

在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方法,就可以执行两个独立的方法, 这个叫委托的多播。

 

当一个委托变量关联了多个方法时,按照关联的方法的次序依次执行。

       

发表评论