委托(delegate)
委托声明定义了一种类型,它用一组特定的参数以及返回类型来封闭方法。对于静态方法,委托对象
封装要调用的方法。对于实例方法,委托对象同时封闭一个实例和该实例上的一个方法。如果您有一
个委托对象和一组适当的参数,则可以用这些参数调用该委托。
委托提供了类似于c++中函数指针的功能,简单的说委托类型就是面向对象函数指针。
不过c++的函数指针只能指向静态的方法,而委托除了可以指向一个静态的函数方法外,还可以指
向对象的实例的方法。而最大的差异在于委托是完全的面向对象,且使用安全的类型,另外委托允许程序员在程序执行时传入
方法的名称,动态的决定预调用的方法。如此的弹性更能让程序员随心所欲的发挥。
委托的本质是一个类,任何可以声明类的地方都可以使用委托。
委托的使用举例:
using System;
delegate void EatDelegate(string food);//委托的声明,返回值及形参要与所指向的函数对应
class MyDelegate
{
static void zsEat(string food)
{
Console.WriteLine("zs eat "+food);
}
static void lsEat(string food)
{
Console.WriteLine("ls eat "+food);
}
static void wwEat(string food)
{
Console.WriteLine("ww eat "+food);
}
static void Main()
{
EatDelegate zs=new EatDelegate(zsEat);
EatDelegate ls=new EatDelegate(lsEat);
EatDelegate ww=new EatDelegate(wwEat);
//方法一
zs("apple");
Console.WriteLine("--------------");
//方法二
EatDelegate eatChain;
eatChain=zs+ls+ww;
eatChain("orange");
Console.WriteLine("--------------");
//方法三
eatChain-=zs;//??zs???
eatChain("banana");
Console.WriteLine("--------------");
//方法四
eatChain+=zs;//???zs???
eatChain("banana");
Console.WriteLine("--------------");
//方法五,匿名方法
/*
* EatDelegate eatChain=null;
* eatChain+=delegate(string food){console.writeLine("zs eat "+food);};
* eatChain("pear");
*/
}
}
浙公网安备 33010602011771号