委托是C#中的一大特色。
委托从字面上理解就是一种代理,类似于房屋中介,由租房人委托中介为其租赁房屋。
在 C# 语言中,委托则委托某个方法来实现具体的功能。
委托是一种引用类型,虽然在定义委托时与方法有些相似,但不能将其称为方法。
委托在使用时遵循三步走的原则,即定义声明委托、实例化委托以及调用委托。
一、命名方法委托
声明:
修饰符 delegate 返回值类型 委托名(参数列表);
如:public delegate void Mydele(int a);
实例化:
和对象的实例化差不多
如:Mydele my=new Mydele(方法名,如果是静态方法直接引用;非静态方法需通过对象引用);
Mydele my = new Mydele(new Program().Sayhello);
public void Sayhello(int a) {
Console.WriteLine("hello delegate {0}",a);
}
调用 :
my(4);
//需要根据参数列表来传参
二、多播委托
多播委托是指在一个委托中注册多个方法,在注册方法时可以在委托中使用加号运算符或者减号运算符来实现添加或撤销方法。
举例:
class Program
{
public delegate void Mydele();
static void Main(string[] args)
{
Mydele my = new Mydele(new Program().Sayhello);
my += new Program().Sayhello2;
my += new Program().Sayhello3;
my();
}
public void Sayhello() {
Console.WriteLine("hello delegate 1 ");
}
public void Sayhello2()
{
Console.WriteLine("hello delegate 2");
}
public void Sayhello3()
{
Console.WriteLine("hello delegate 3 ");
}
}
三、匿名委托
匿名委托是指使用匿名方法注册在委托上
首先也需要定义委托
修饰符 delegate 返回值类型 委托名 ( 参数列表 );
然后定义匿名委托
委托名 委托对象 = delegate
{
//代码块
};
最后调用委托
委托对象(参数列表);
举例:
public delegate void Mydele();
static void Main(string[] args)
{
Mydele my = delegate
{
Console.WriteLine("hello delegate 4");
};
my();
}