委托 事件 监听 .net
小弟刚学不久 有些概念不明白,特来请教下各位大侠
委托=函数指针,可以加上一个或多个函数一次调用
事件是特殊的委托,但是我不明白事件是怎么被监听然后调用的 在.net里面
我看design.cs 不明白new System.EventHandler这是个什么东西,为什么有
this.btn_confirm.Click += new System.EventHandler(this.btn_confirm_Click);
是干嘛用的呢
假设我想给一个button或者别的自定义控件加上一个事件,不再是什么onclick之类他自己存在的,该怎么做呢?
分不多,意思下 ,谢谢~
------解决方案-------------------- 1.委托就就是把委托的对象指向给某个函数 执行委托就相当于执行那个函数了(目的其实就是方便传递 )
2.事件的监听是必须在调用事件之前定义的 要不没有效果
------解决方案-------------------- 引用: 小弟刚学不久 有些概念不明白,特来请教下各位大侠
委托=函数指针,可以加上一个或多个函数一次调用
事件是特殊的委托,但是我不明白事件是怎么被监听然后调用的 在.net里面
我看design.cs 不明白new System.EventHandler这是个什么东西,为什么有
this.btn_confirm.Click += new System.EventHandler(thi……
this.btn_confirm.Click += new System.EventHandler(this.btn_confirm_Click);
System.EventHandler这个就是API的一种委托类型,你再问它是啥,我还是告诉你这是一种API的委托类型,你要是再问第三次我就揍你一顿!
这个么。。。。咋说,就是个事件的生命,btn_confirm.Click是按钮的事件属性,+=是重载的运算符,new System.EventHandler(this.btn_confirm_Click);这里就是委托了,你看this.btn_confirm_Click这个是方法,方法作为参数,说白一点就是用户通知程序一个事情,程序去做一个事情!恩 就这么个意思 = =!
比如说,小明的妈妈告诉小明去打酱油,妈妈就是用户,告诉小明的内容就是消息,小明得到消息后可以判断是打酱油,打酱油方法里边有怎么打酱油的详细实现过程,比如先到商店,给钱,拿酱油,回家!
也就等同于,Click是标定好的一种行为名称,相当于打酱油,这种行为的具体实现是用户自定义的,也就是btn_confirm_Click,也就是打酱油的具体方法,妈妈就是用户,小明就是这个btn_confirm按钮,用户点了按钮,就相当于妈妈告诉了小明打酱油!我不知道这么解释行不行啊。。。反正我一路上都这么理解的!
如果你要想给BUTTON重新定义一种事件委托,那你就继承BUTTON然后重写他,你想加啥就加啥,至于说怎么重写,你自己翻书去!或者给你段DEMO。。。。
------解决方案-------------------- 引用: 引用:
参考:
http://msdn.microsoft.com/en-us/library/aa645739(v=vs.71).aspx
理解事件是怎么触发的,事件是调用对象内部触发的,如同函数调用一样。
至于按钮事件,原理一样,但是牵涉到Windows消息处理机制,理解起来会比较困难。从简单的开始。
P.S. 不要简单地认为委托是函数指针,……
委托是一种特殊的类。C#变了一个魔术,用关键字一种简洁的语法来表示。
使用委托的好处在于,不直接调用,而是“委托”委托去掉用,可以验证调用的函数是否符合方法签名,参数是否正确等等,具有安全性。另外委托实现了很多高级的功能,比如多播、委托链。你可以同时允许几个调用者同时“监听”。
------解决方案-------------------- 引用: 引用:
引用:
恩 受教了。。经常听这句,就自认为 委托就是可以一起调用几个函数....因为经验少,确实没用到的经验,不太明白有什么用,因为如果要调用函数的话还是直接调用函数就行了,为啥隔一步调用委托呢。?
有的时候没办法直接调用的,比如说你这个按钮,如果没有委托的话,你要这么告诉你的应用程序,你已经单击了按钮?……
实例说明吧。。。。概念楼上那个被围观的大牛已经跟你说过了!
public class Test
{
public delegate void NewDelegate();
public NewDelegate TestDelegate;//委托
public static event TestDelegate TestEvent;//事件
//比如你有一个按钮的CLICK响应时间,你就可以在这里调用
private void Button1_Click(object sender, EventArgs e)
{
TestDelegate();//执行委托
TestEvent();//执行事件
}
}
public Class Test2
{
Test test=new Test();
test.TestDelegate=this.DoSomeThing;
Test.TestEvent+= new Test.TestDelegate(DoSomeThing);
void DoSomeThing()
{
//you can do something here
}
}