委托
在官网上对委托的官方述。委托是一种定义方法签名的类型。当实例或委托时,可以将其实例的任何具有兼容签名的方法相关联。
它的特点:
l 委托类似于C++函数指针,但他们是类型安全的。
l 委托允许将方法作为参数传递。
l 委托可用于定义回调方法。
l 委托可以连接在一起。
l 委托不必与委托签名完全匹配。
l 委托可以将匿名方法作为委托类型。
刚开始看官方说词,我看的懵懵懂懂的。个人从字面上看委托就是做啥事情不是本人亲自去做,要其他人代替你去做你想要做的事情。如你想吃东西,当你懒的出门去买东西,你可能会叫别人帮你买,或者打电话到商店要商店的员工直接送到家。只要你发送一句话让他人帮你去做这件事,那这个过程就是委托。在生活中像邮递员,酒店的迎宾者等都是委托的例子,也类似于设计模式中观察者模式(回调函数)。
以下简单实用委托的步骤:
public class Test
{
//1.声明一个委托:
public delegate void Del(string message);//在类中声明,如声明类的成员变量
public static void MyMethod(String message)
{
Console.WriteLine(message);
}
static void Main(String[] args)
{
Del d = MyMethod; //2.实例化委托
d(“Hello World!”) //3.调用委托
}
}
///控制台打印出 Hello World!
以上简单例子可看出,在Main中不直接调用MyMethod方法,而是通过声明Del委托类型的d来调用MyMethod方法。
我们在从委托的特点1来看:
委托类似与C++中的函数指针,在我们声明一个委托时,用vs查看类视图可看出。委托的声明相当于类的声明。而在官网中也提到委托继承与Delegate类。
委托的数据类型是安全的,
1、在编译时,报MyMethod的重载与委托“Del”不匹配
public static void MyMethod(String message,int num) { Console.WriteLine(message); } static void Main(String[] args) { Del d = MyMethod; d(“Hello World!”); }
2、在编译时,报MyMethod的返回类型错误
public static int MyMethod(String message)
{
Console.WriteLine(message);
return 0;
}
static void Main(String[] args)
{
Del d = MyMethod;
d(“Hello World!”);
}
从这对方法参数和返回值的两个就体现了委托对数据类型是强类型的。
委托的特点2,
在特点1中已经说委托相当于是个类型,当然也可为当做参数作为传递值
public statiac void MethodWithCallback(int param1,int param2,Del callback)
{
callback(“The number is:”+(param1 + param2).ToString());
}
static void Main(String[] args)
{
Del d = MyMethod;
d(“Hello World!”);
MethodWithCallback(1,2,d);
}
///打印: Hello World!
///The number is: 3
未完待续。。。