转自http://www.tracefact.net/tech/009.html
委托
委托是一个类,它定义了方法的类型,使得可以将方法当作另一个方法的参数来进行传递,这种将方法动态地赋给参数的做法,可以避免在程序中大量使用If-Else(Switch)语句,同时使得程序具有更好的可扩展性。
使用委托可以将多个方法绑定到同一个委托变量,当调用此变量时(这里用“调用”这个词,是因为此变量代表一个方法),可以依次调用所有绑定的方法。
class Program
{
static void Main(string[] args)
{
string str = Console.ReadLine();
People people = new People();
for (int i = 0; i < str.Length; i++)
{
if((int)str[i]>127)//判断是第一个字符否为中文字符
{
people.Greetlanguage(str,people.Gchinese);
break;
}
else
{
people.Greetlanguage(str, people.Genglish);
break;
}
}
Console.ReadKey();
}
}
public delegate void myDelegate(string name);//声明委托
class People
{
public void Genglish(string name)
{
Console.WriteLine("hi,good morning {0}",name);
}
public void Gchinese(string name)
{
Console.WriteLine("嗨,早上好,{0}",name);
}
public void Greetlanguage(string name,myDelegate mydelegate)//这里mydelegate是一种myDelegate类型的参数
{
mydelegate(name);
}
}
事件
class Program
{
static void Main(string[] args)
{
Form form = new Form();
People people = new People(form);
form.ShowDialog();
}
}
class People
{
private Form form;
public People(Form form)
{
if(form!=null)
{
this.form = form;
this.form.Click += this.formClicked;//这个this(后面这个)代表的是People的实例,用实例来处理这个事件,把事件和formClicked方法连接到了一起
}
}
private void formClicked(object sender, EventArgs e)
{
this.form.Text = DateTime.Now.ToString();
}
}