如何理解c#中的委托
5个回答
展开全部
委托是对函数的封装,可以当作给方法的特征指定一个名称。而事件则是委托的一种特殊形式,当发生有意义的事情时,事件对象处理通知过程。
最常见的例子就是Tom猫叫“喵,我是TOM”,有两只老鼠Jerry和Jack就说“猫来了,快跑!"
你分析一下,这两个类是如何执行?
在Main函数中执行,当Cat的Shout触发时,Mouse就执行Run。那么如何让Shout触发?显然老猫不认识老鼠,也不会主动通知它们。
委托是一种引用方法的类型。一旦为委托分配了方法,委托将与该方法具有完全相同的行为。
委托通过delegate来声明。而事件是说在发生其他类或对象关注的事情时,类或对象可通过事件通知它们。事件对象用event声明。
class Cat
{
private string name;
public Cat(string name)
{
this.name = name;
}
public delegate void CatShoutEventHandler(); //声明委托
public event CatShoutEventHandler CatShout; //声明事件,它的事件类型 CatShoutEventHandler
public void Shout()
{
// 喵
if (CatShout != null)
{
CatShout(); //若CatShout中有对象登记,则执行
}
}
Class Mouse
{
//name 字段
//name 属性
public void Run()
{
// 跑
}
}
static void Main()
{
Cat cat = new Cat("Tom");
Mouse mouse1 = new Mouse("Jerry");
Mouse mouse2 = new Mouse("Jack");
cat.CatShout += new Cat.CatShoutEventHandler(mouse1.Run);
cat.CatShout += new Cat.CatShoutEventHandler(mouse2.Run);
cat.Shout();
Console.Readkey();
那么事件里的(object sender,EventArgs e)里的两个参数做什么用?
我们增加一个类CatShoutEventArgs,让它继承EventArgs(包含事件数据的类的基类),这个子类的属性Name,就是猫叫事件触发,需要传递Cat对象的名字
Cat类中可以改这段:
public delegate void CatShoutEventHandler(object sender,CatShoutEventArgs args);
在Shout()做修改:
if (CatShout != null)
{
CatShoutEventArgs e = new ...();
e.Name = this.name;
CatShout(this,e); //将发送通知的自己以及需要的数据传递过去
Mouse类中改为:
Run( object sender, CatShoutEventArgs args)
{
//老猫 + args.Name + 老鼠名字 + 快跑
}
}
最常见的例子就是Tom猫叫“喵,我是TOM”,有两只老鼠Jerry和Jack就说“猫来了,快跑!"
你分析一下,这两个类是如何执行?
在Main函数中执行,当Cat的Shout触发时,Mouse就执行Run。那么如何让Shout触发?显然老猫不认识老鼠,也不会主动通知它们。
委托是一种引用方法的类型。一旦为委托分配了方法,委托将与该方法具有完全相同的行为。
委托通过delegate来声明。而事件是说在发生其他类或对象关注的事情时,类或对象可通过事件通知它们。事件对象用event声明。
class Cat
{
private string name;
public Cat(string name)
{
this.name = name;
}
public delegate void CatShoutEventHandler(); //声明委托
public event CatShoutEventHandler CatShout; //声明事件,它的事件类型 CatShoutEventHandler
public void Shout()
{
// 喵
if (CatShout != null)
{
CatShout(); //若CatShout中有对象登记,则执行
}
}
Class Mouse
{
//name 字段
//name 属性
public void Run()
{
// 跑
}
}
static void Main()
{
Cat cat = new Cat("Tom");
Mouse mouse1 = new Mouse("Jerry");
Mouse mouse2 = new Mouse("Jack");
cat.CatShout += new Cat.CatShoutEventHandler(mouse1.Run);
cat.CatShout += new Cat.CatShoutEventHandler(mouse2.Run);
cat.Shout();
Console.Readkey();
那么事件里的(object sender,EventArgs e)里的两个参数做什么用?
我们增加一个类CatShoutEventArgs,让它继承EventArgs(包含事件数据的类的基类),这个子类的属性Name,就是猫叫事件触发,需要传递Cat对象的名字
Cat类中可以改这段:
public delegate void CatShoutEventHandler(object sender,CatShoutEventArgs args);
在Shout()做修改:
if (CatShout != null)
{
CatShoutEventArgs e = new ...();
e.Name = this.name;
CatShout(this,e); //将发送通知的自己以及需要的数据传递过去
Mouse类中改为:
Run( object sender, CatShoutEventArgs args)
{
//老猫 + args.Name + 老鼠名字 + 快跑
}
}
2012-02-06
展开全部
C#中的委托类似C语言中的指针函数
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
委托像根绳子,
你可以把东西绑上去,也可以结下了。
当你拉这个绳子的时候就带动绳子上的东西。
委托是引用类型。
你可以把东西绑上去,也可以结下了。
当你拉这个绳子的时候就带动绳子上的东西。
委托是引用类型。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
自己去msdn看例子,然后自己动手写这样才能理解深刻
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询