学习参考资料:
MSDN:ms-help://MS.VSCC.2003/MS.MSDNQTR.2003FEB.2052/cpguide/html/cpconprovidingeventfunctionality.htm
CodeProject: http://www.codeproject.com/csharp/events.asp
几天来参照MSDN上的委托事件的例子,自已写了一个关于委托的事件。例子很简单,但也能说明关于委托与事件是个什么东西吧。
委托,功能就相当于C/C++中的函数指针。可以用定义的委托来调用所指向的函数。
先声明一个简单的委托:
//声明委托:
publicdelegatevoidDeFunction(inta,intb);
//函数声明:
publicvoidSwap(inta,intb)
{
//.
}
//建立一个委托引用,以指向相应的函数。
DeFunctiondefun;
defun=newDefunction(Swap);
//使用委托来代替函数的调用
defun(3,4);//实际上是调用的Swap(3,4)
OK,究竟委托在.net中发挥了什么用处?答案是:可以用于事件。
事件,就是在程序中发生某些情况,需要被相应的函数来处理,比如按纽被按下(Button click)就是一事件,调用到某个函数来处理这个情况。关键的关键是:Button是一个类,它的所有函数都已被封装好,已经不可能再在类中添加相应的函数来处理这个Button被按下究竟该怎么处理。难道像下面这样吗?
classButton
{
..
publicButton_Click(objectsender,EventArgse)
{
//处理Button被按下的代码,需要在这里更改Button被按下的代码
}
publicclick()
{
//告诉这个Button类什么情况下是被按下的,然后调用Button_Click来处理之
//比如,当鼠标在这个Button下按这个按纽时,当Button有交点并按Enter时。都表示鼠标被按下。
Button_Click();
}
}
这样多不实用,多不现实啊。所以,只能想另外的办法...比如可以让Button_Click变成虚拟函数,然后。添加Button时继承这此Button,然后改写这个函数。但也有一个问题,就是我想让处理按纽被按下时的函数是自定义的,比如MyButton_Click,这样子就没有办法了。
如果用委托来做会是什么样的情况?
首先,要定义一个委托。
public delegate void MyEventHandle(object sender,EventArgs e);
注意,在事件中用委托一般命名为EventHandle.
然后,在Button类中可以这样表示:
publicclassButton
{
publicMyEventHandlebuttonclick;//委托类型
publicvirtualvoidOnClick(EventArgse)
{
if(buttonclick!=null)
buttonclick(this,e);//注意,在定义button类的时候,还不知道这个委托会挂到哪个函数上面去,但是肯定会挂到某个函数上面去。
}
publicvoidclick()
{
EventArgse=newEventArgs();//这里是事件参数类型,是一个类,可以派生此类,做个自定义的参数集。
OnClick(e);
}
}
这样的类定义好了,那么我们用它的时候就简单多了。不需要往里改写任何里面的东西,只要添加我们想要的函数就好了。
在我们的(客户端)上。
1.写Button被按下时处理的函数,函数随便怎么命名都可以。
publicclassDoButton
{
publicvoidMyButton_Click(objectsender,EventArgse)
{
//这里写上我们要写的处理内容即可,sender就是Button的对象实体。
//.
}
}
2.挂钩,把上面的函数与Button类中的委托挂起来
Buttonbt=newButton();
DoButtondobutton=newDoButton();
bt.buttonclick+=newMyEventHandle(dobutton.MyButton_Click);//已与Button中的委托挂钩了
//下面,如果发生click事件,就可以调用我们写的MyButton_Click函数了。
bt.click();
分享到:
相关推荐
根据经典的实例,详细而全面的介绍了c#委托与事件,以及他们之间的关系
C#委托与事件
C# 委托与事件,实例代码,调试通过.人个认为对理解C#的委托与事件会有一定的帮助.
委托 和 事件在 .Net Framework中的应用非常广泛,然而,较好地理解委托和事件。对很多接触C#时间不长的人来说并不容易。它们就像是一道槛儿,过了这个槛的人,觉得真是太容易了,而没有过去的人每次见到委托和事件...
讲诉了 C# 中的委托和事件的一个Demo,demo 简单易懂,自己认为还是挺不错的。
c#用委托来实现事件通知机制。委托相当与c++函数指针。整个过程涉及一个呼叫者,一个被呼叫者,还有就是这个委托。
【原创】C#委托与事件的传递与封装案例 c#经典案例.pdf
C# 委托与事件 猫鼠问题示例。通过猫叫老鼠跑,来展示委托与事件。即通过传递把一个类的方法传递给另外一个类的事件(+=方式注册),在另外一个类中执行事件。
深入浅出讲解C#委托与事件
C#委托与事件.rar
委托与事件一直都是c#语言比较难啃的一个部分,但是你看完这个文档就全明白了
委托与事件讲解ppt,可以让从0开始学C#的人了解委托与事件的区别和联系
C#委托与事件[定义].pdf
让你快速理解和掌握c#委托与事件! 这资源必是极好的!
这是C# 委托与事件简单的使用例子。 只是为了初学者更好的接受委托与事件使用方法而已。 程序有两个窗体,一个是主窗体,一个是副窗体。 打开主窗体,在主窗体中点按钮后,打开副窗体,在副窗体中,可以调整主窗体...