1.委托
委托是一种类型,是方法的类型,委托定义了方法的类型;这样就能把方法作为参数进行传递。
代码
namespace First
{
//定义委托,它定义了可以代表方法的类型
public delegate void GreetingDelegate(string name);
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void GreetPeople(string name, GreetingDelegate MakeGreeting)
{
MakeGreeting(name); //此句的意思是将name传递给方法MakeGreeting
}
private void Form1_Load(object sender, EventArgs e)
{
//将方法EnglishGreeting作为一个参数传递
//对应到GreetPeople中,是将"KIMI"传递给了EnglishGreeting
GreetPeople("KIMI", EnglishGreeting);
//将方法ChineseGreeting作为一个参数传递
//对应到GreetPeople中,是将"莱科宁"传递给了ChineseGreeting
GreetPeople("莱科宁", ChineseGreeting);
}
//此处函数的签名必须和委托GreetingDelegate(string name)一致
private void EnglishGreeting(string name)
{
MessageBox.Show("Morning, " + name);
}
private void ChineseGreeting(string name)
{
MessageBox.Show("早上好," + name);
}
}
}
运行结果:
陆续跳出两个对话框


2.委托链
将多个方法捆绑到同一个委托对象上,形成委托链,当调用这个委托对象时,将依次调用委托链中的方法。
代码
//定义委托,它定义了可以代表方法的类型
public delegate void GreetingDelegate(string name);
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void GreetPeople(string name, GreetingDelegate MakeGreeting)
{
MakeGreeting(name); //此句的意思是将name传递给方法MakeGreeting
}
private void Form1_Load(object sender, EventArgs e)
{
//将方法EnglishGreeting作为一个参数传递
//对应到GreetPeople中,是将"KIMI"传递给了EnglishGreeting
//GreetPeople("KIMI", EnglishGreeting);
//将方法ChineseGreeting作为一个参数传递
//对应到GreetPeople中,是将"莱科宁"传递给了ChineseGreeting
//GreetPeople("莱科宁", ChineseGreeting);
GreetingDelegate delegate1 = new GreetingDelegate(EnglishGreeting);
//delegate1 = ChineseGreeting;
delegate1 += ChineseGreeting;
//delegate1 += EnglishGreeting;
delegate1("KIMI");
}
//此处函数的签名必须和委托GreetingDelegate(string name)一致
private void EnglishGreeting(string name)
{
MessageBox.Show("Morning, " + name);
}
private void ChineseGreeting(string name)
{
MessageBox.Show("早上好," + name);
}
}
运行结果:
依次弹出两个对话框




浙公网安备 33010602011771号