嘱托 事件 监听 .net
委托事件监听 .net小弟刚学不久 有些概念不明白,特来请教下各位大侠委托函数指针,可以加上一个或多个函数
委托 事件 监听 .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 } }