------- Windows Phone 7手机开发、.Net培训、期待与您交流! -------
所谓委托,就是把一个方法的引用作为参数传给另一个方法。因为有时某个方法执行的操作并不是针对数据进行的,而是要对另个方法进行操作。只是委托要比C++中把一个函数的指针作为参数传给另一个函数更加安全,它强制指定了其中作为参数的方法的返回值和参数,提高了类型安全性。
1.声明委托,就是告诉编译器这种委托表示哪种类型的方法。然后,创建该委托的一个或多个实例。
声明委托的语法:
[修饰符] delegate 返回类型 委托名(参数列表);
声明一个委托前,必须确定所要调用的的方法的返回值和参数列表,委托的返回值、参数列表和方法的返回值、参数列表必须相同。
注:如果委托是在名称空间中定义,即不属于任何一个类,则修饰符只能是public或者internal,不写则默认为internal类型。如果属于一个类,则可使用全部类型的修饰符进行控制委托的使用范围。
例:public delegate string myDelegate( int n );
2.实例化委托
myDelegate p;
定义了一个委托对象p
3.调用委托
myDelegate p = new myDelegate(obj.fun1); //此时p为引用类型
或者myDelegate p = obj.fun1; //此时p为值类型
完整例子:
namespace 委托
{
delegate double myDelegate(double x,double y);//创建一个委托
class MyDeClass
{
public double add(double x, double y)
{
return x + y;
}
public double sub(double x, double y)
{
return x - y;
}
public double mul(double x, double y)
{
return x * y;
}
public double div(double x, double y)
{
return x / y;
}
}
}
namespace 委托
{
class Program
{
static void Main(string[] args)
{
MyDeClass my = new MyDeClass();
//调用委托,把方法名作为参数传递给委托。
myDelegate myde = new myDelegate(my.add);
//可以写成myDelegate myde = my.add;
Console.WriteLine("5 + 8 = " + myde(5, 8));
myde = new myDelegate(my.sub);
Console.WriteLine("5 - 8 = " + myde(5, 8));
myde = new myDelegate(my.mul);
Console.WriteLine("5 * 8 = " + myde(5, 8));
myde = new myDelegate(my.div);
Console.WriteLine("5 / 8 = " + myde(5, 8));
Console.ReadKey();
}
}
}
4.委托对象封装多个方法
static void Main(string[] args)
{
MyDeClass my = new MyDeClass();
//调用委托,把方法名作为参数传递给委托。
myDelegate p;
p = my.add;
p += my.sub;
p += my.mul;
p += my.div;
p(5, 8); //委托对象已经指向这四个方法,执行时会循环调用这这个方法。
}