| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 658 人关注过本帖
标题:我是新手,请大侠们给我解说一下事件函数的情况(如何定义,如何使用,在什么情 ...
只看楼主 加入收藏
athenalux
Rank: 11Rank: 11Rank: 11Rank: 11
来 自:河北石家庄
等 级:小飞侠
威 望:8
帖 子:975
专家分:2514
注 册:2008-11-26
结帖率:100%
收藏
 问题点数:0 回复次数:1 
我是新手,请大侠们给我解说一下事件函数的情况(如何定义,如何使用,在什么情况下使用)
如题所示,最近看书太多了,头很疼,却看不懂,好像什么先创建一个delegate函数,还要定义delegate的对象,还要用event来定义事件函数,最后还要怎么连接起来.只好到这来求助了~~~~
希望有人能写出这个定义的标准格式举例,以及用法,最后请说下什么情况下需要使用事件函数,能举例说明最好了~~~
如果有时间的话,也请讲一下"自定义异常"的相关情况(定义,使用方法等)
搜索更多相关主题的帖子: 函数 定义 解说 
2008-11-26 09:07
zhoufeng1988
Rank: 15Rank: 15Rank: 15Rank: 15Rank: 15
来 自:北京
等 级:贵宾
威 望:27
帖 子:1432
专家分:6329
注 册:2009-5-31
收藏
得分:0 
快一年啦哥们..虽然是老帖,我也说说吧,想过去我学委托事件的时候也是相当头疼。后来是看了大量别人的总结和自己的实践才明白。希望对你有所帮助!


不知道你有没有学过C,委托也就是你说的delegate,相当于C中的函数指针。在C语言里,通过函数指针将一个函数当做参数传递。到了C#,完全都是面向对象了。函数<方法>也被看成一个对象,这个对象是一个特殊的对象。必须得用delegate关键字来声明。所以就有了委托。

举个简单的例子,假如有一个方法,
public string GreetingToSomebody(string PersonName)
{
    return "Hello!" + PersonName + "!";
}

这是一个带有一个string参数并且有一个返回string值的方法。我们可以建立其对应的委托。

public delegate GreetingEventHandler string (string PName);

这样,我们就建立一个对应于一个string参数和一个返回string值的委托。
我们可以使用该委托传递方法。

例如:
public void ShowGreeting(GreetingEventHandler GEH)
{
    Console.WriteLine(GEH("athenalux"));
}

当然,这也是一种十分简单的例子。

然后我们看看事件吧。
事件是一个特殊的委托。概念性的东西就不要我多说了,看看怎么用事件吧。
首先,声明一个事件。

public event GreetingEventHandler OnGreeting;

这就是一个简单的事件。每一个事件后面都有一个委托,也就是定义这个事件的响应方法,我们在winForm里经常看见,EventHanlder,就是这么一个意思。
定义完事件之后,我们就可以触发事件和添加事件的处理程序了。

在C#里,事件是以下面的方式进行触发:

OnGreeting("Me");

事件的名字,加上要传递给事件处理程序的参数。参数的个数和类型都必须与事件的委托对应。对吧?
可能你会问,我们要这个参数干嘛?费劲!这个参数可以传递当前对象的一些信息给响应方法,是非常有用的。
前面给你回的帖子里,就用到了这个。Form2定义了一个事件,这个事件触发的时候会回给出两个参数,一个是当前窗体的对象,另一个是自己定义的EventArgs..这个,你可以自己参见代码学习。

事件响应,即事件响应方法。当一个事件触发后,必须要一个方法来处理它。不然,触发这个事件就没有意义了。拿你前面的例子来说,单击了Button按钮,就应该触发传值事件。然后给这个传值事件添加一个处理方法,就是把Form2的某个值取出来,用在Form1中。这也是windows Form中的事件机制,非常重要。

说说什么情况使用事件吧,在winForm中,事件是用来通信的。例如:就像Form1和Form2之间的通信。
举个例子,当Form2中的一些数据更新了,需要通知Form1, 数据更新了!!!如果没有事件,你用什么构造函数啊,静态变量啊,都是相当的繁琐不直观。这时候也就是事件的威力了!使用事件,轻松就可以实现了。

自定义异常。我就简单的说吧,就是继承一下Exception类就完了。
Exception是所有异常的基类,是一个异常就应该继承Exception,继承了Exception,你就可以在你创建的这个类中添加你需要的信息。然后用在你的程序中。具体方法就不说了,很简单。
当用户一个误操作可能会引起你定义的异常,你在会引起异常的地方,抛出异常,然后用try...catch结构就能捕获它。
抛出异常的方法你应该知道吧?

throw new Exception("Throw a exception");

就是这样的。好了..就说这么多了。
2009-09-22 10:50
快速回复:我是新手,请大侠们给我解说一下事件函数的情况(如何定义,如何使用,在什 ...
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.020696 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved