C# 中的委托类似于 C 或 C++ 中指向函数的指针。委托表示引用某个方法的引用类型变量,运行时可以更改引用对象。
特别地,委托可以用于处理事件或回调函数。并且,所有的委托类都是从 System.Delegate 类继承而来。
委托是方法的抽象,它存储的就是一系列具有相同签名和返回回类型的方法的地址。调用委托的时候,委托包含的所有方法将被执行。
委托在使用时遵循三步走的原则,即定义声明委托、实例化委托、以及调用委托。如下例:
namespace TEST
{
//class Program
//{
// static void Main(string[] args)
// {
// }
//}
class Program
{
//1:定义声明委托
//语法:修饰符 delegate 返回值类型 委托名 ( 参数列表 );
public delegate void MyDelegate();
//public delegate void MyDelegate2();
static void Main(string[] args)
{
//2:实例化委托---给委托绑定方法。因为委托是一个类,所以用new关键字来创建委托的实例
//语法:委托名 委托对象名 = new 委托名 ( 方法名 );
MyDelegate myDelegate1 = new MyDelegate(Test.SayHello);//若使用静态方法,在向委托中传递方法名时只需要用 “类名.方法名” 的形式。
MyDelegate myDelegate2 = new MyDelegate(new Test().SayGoodbye);//若使用实例方法,在向委托中传递方法名时要使用 “new 类名().方法名” 的形式。
//3:调用委托---触发委托绑定的方法。
//语法:委托对象名 ( 参数列表 );
myDelegate1();
myDelegate2();//参数列表中传递的参数 必须与委托定义的参数列表相同。
Console.ReadKey();
}
}
class Test
{
public static void SayHello()
{
Console.WriteLine("Hello Delegate1"); //调用委托时,委托中的方法会被执行。
}
public void SayGoodbye()
{
Console.WriteLine("Goodbye Delegate2");
}
}
}
//执行顺序:main函数开始-->实例化委托--->调用委托--->执行委托中的方法--->返回调用委托处,继续往下执行
//执行结果为:
Hello Delegate1
Goodbye Delegate2