概念:类似方法在内存中的首地址,但是它是类型安全的,明确知道方法的返回值类型和参数。可以这样理解:对方法的一个间接调用。定义了委托相当于定义了一个类。
格式:访问修饰符 关键字(delegate) 所指向方法的返回类型 委托的名字([形参]);
使用方式:委托的名字 委托对象 = 关键字(new ) 委托的名字(所指向方法的名字);
委托对象([实参]);
委托的分类:单播委托,多播委托
单播委托:所指向方法的返回类型是具体的数据类型(如:int,short等);
多播委托:所指向方法的返回类型不是具体的数据类型,而是空(void);
例:
public delegate void CallPoliceHander();//定义委托,用来指向事件发生时调用的方法。
public class Car
{
public event CallPoliceHander OnCrach;//通过委托定义事件。
public void Cracsh()
{
if (OnCrach != null)//事件发生了,如果不为空则表明事件发生了
{
OnCrach();//调用委托所引用的方法
}
}
}
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
Car car = new Car();//创建对象
car.OnCrach += new CallPoliceHander(car_OnCrach);
car.Cracsh();
}
void car_OnCrach()
{
MessageBox.Show("已经通知警察了!");
}
}
一个委托可以调用多个方法:
public delegate void Print();//声明一个委托
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
Print p = new Print(PrintA);
p += PrintC;
p += PrintB;
p();//调用委托所引用的方法。
}
private void PrintA()
{
MessageBox.Show("PrintA");
}
private void PrintB()
{
MessageBox.Show("PrintB");
}
private void PrintC()
{
MessageBox.Show("PrintC");
}
}