快一年啦哥们..虽然是老帖,我也说说吧,想过去我学委托事件的时候也是相当头疼。后来是看了大量别人的总结和自己的实践才明白。希望对你有所帮助!
不知道你有没有学过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");
就是这样的。好了..就说这么多了。