委托是一种安全地封装方法的类型,它与 C 和 C++ 中的函数指针类似。与 C 中的函数指针不同,委托是面向对象的、类型安全的和保险的。委托的类型由委托的名称定义。下面的示例声明了一个名为 Del 的委托,该委托可以封装一个采用字符串作为参数并返回 void 的方法。
构造委托对象时,通常提供委托将包装的方法的名称或使用匿名方法。实例化委托后,委托将把对它进行的方法调用传递给方法。调用方传递给委托的参数被传递给方法,来自方法的返回值(如果有)由委托返回给调用方。这被称为调用委托。可以将一个实例化的委托视为被包装的方法本身来调用该委托.
委托类型派生自 .NET Framework 中的 Delegate 类。委托类型是密封的,不能从 Delegate 中派生委托类型,也不可能从中派生自定义类。由于实例化委托是一个对象,所以可以将其作为参数进行传递,也可以将其赋值给属性。这样,方法便可以将一个委托作为参数来接受,并且以后可以调用该委托。
using System;
namespace DelegateDemo
{
//声明一个委托,委托的类型由委托的名称定义。
public delegate void Del(string message);
/// <summary>
/// Summary description for Class1.
/// </summary>
class Class1
{
/// <summary>
/// The main entry point for the application.
/// </summary>
[STAThread]
static void Main(string[] args)
{
//实例化委托
Del handler = new Del(DelegateMethod);
//委托多路广播
//handler += new Del(DelegateMethod2);
handler("invoke delegate");
//将上面创建的委托传递给该方法
MethodWithCallback(handler);
Console.Read();
}
public static void DelegateMethod(string message)
{
System.Console.WriteLine(message);
}
public static void DelegateMethod2(string message)
{
System.Console.WriteLine("this is 2 "+message);
}
//将上面创建的委托作为参数传递给该方法
public static void MethodWithCallback(Del callback)
{
callback("callback delegate");
}
}
}