什么是委托
要传递方法,就必须把方法的细节封装在一钟新类型的对象中,即委托。委托是一种特殊类型的对象,其特殊之处在于,我们以前定义的所有对象都包含数据,而委托只包含一个或多个方法的地址。
.NET版本中,委托指向方法的地址。在C++中,函数指针是一个指向内存位置的指针,但它不是类型安全的。开发者无法判断这个指针实际指向什么,像参数和返回值等项就更不知道了。
.NET委托是类型安全的类,它定义了返回类型和参数的类型。委托类不仅包含对方法的引用,也可以包含对多个方法的引用。
可以认为委托是持有一个或多个方法的对象。委托可以被执行,执行委托时委托会执行它所“持有”的方法
代码示例:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace CodeForDelegate
{
//使用关键字delegate声明委托类型
//委托是一种类型,所以它与类属于同一级别
//注意:这里是委托类型,而不是委托对象
delegate void MyDel(int value);
class Program
{
void PrintLow(int value)
{
Console.WriteLine("{0} - Low Value", value);
}
void PrintHigh(int value)
{
Console.WriteLine("{0} - High Value", value);
}
static void Main(string[] args)
{
//实例化Program类,以访问PrintLow和PrintHigh方法
Program program = new Program();
//声明一个MyDel类型的委托
MyDel del;
//创建随机数
Random rand = new Random();
int randomvalue = rand.Next(99);
//使用三目运算符根据当前随机数的值来创建委托对象
del = randomvalue < 50
? new MyDel(program.PrintLow)
: new MyDel(program.PrintHigh);
//执行委托
del(randomvalue);
Console.ReadKey();
}
}
}
从上例可以看出,使用委托的首先得通过关键字delegate声明一个委托类型,这个委托类型包括返回值、名称、签名;当类型声明好以后,需要通过new来创建委托对象,创建对象时的参数是一个方法,这个方法的签名和返回类型必须与该委托类型定义的签名一致;调用委托时,直接通过实例化的委托对象名,并提供参数即可,然后委托会执行在其所持有的方法










