莱科宁

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::

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);
}
}

运行结果:

  依次弹出两个对话框

posted on 2010-05-21 15:25  莱科宁  阅读(1174)  评论(0)    收藏  举报