我眼中委托的真正面貌(一)
2009-05-07 08:26:53 来源:WEB开发网这段代码相对于上段代码产生了部分改动,不过,意思上大体相同:这次的委托对象定义在次类中,不过仅仅是一个引用,我并没有在次类中对其进行任何的初始化。相反,次类中委托对象方法挂载的工作是在主类中进行的:首先,我在主类中定义次类的实体对象,而后通过这个对象将主类的DelegateFun()方法挂接到次类的委托对象上。这样当次类的方法MyFun()被调用(事实上,你也可以将这个方法看做一个事件,当事件被触发时),就会调用主类中事先写好的DelegateFun()方法。
写到这里,我不知道你有没有看出使用委托的优势所在。其实,将第二段、第三段代码反复比对之后你就会发现二者有明显的不同!我们暂且撇开委托这种机制不谈,但看两段代码中本类与次类方法交互的手法便不难发现:二、三同为一个类调用另一个类中的方法,前者为一个类控制自身调用(另一个类的)一些方法;而后者却是一个类在控制另一个类调用哪些方法。
呵呵……悟性好的人应该已经联想到了,这种手法很像C#中的事件机制。而事实上,C#中的事件就是委托的一种特殊形式。
4.C#中事件的实现
首先,我先构建一个用户控件工程,代码如下:
namespace Ctrleven
{
public partial class UserControl1 : UserControl
{
//定义委托
public delegate void MyEventHander();
//用委托声明事件
public event MyEventHander MyEvent;
public UserControl1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
MyEvent();
}
}
}
更多精彩
赞助商链接