我眼中委托的真正面貌(一)
2009-05-07 08:26:53 来源:WEB开发网首先,我们定义委托类型void MyDelegete();
这里有必要强调一下委托的声明规则:委托使用关键字delegate来声明,因其本身就是一种类型,故可以在类内声明,亦可以独立于类而声明。关键字之后是此委托类型的实体部分。不难看出其形式与方法的声明相近,但不包含函数体。
其实,我们大可理解为委托本身就是定义了一类方法,一类其返回值与参数表和委托实体定义形式完全相同的方法。只有符合委托规则的方法,才可以挂接于此委托的实例对象之上。这也是为什么,我将整个void MyDelegete()称作委托类型的原因。
接下来我们要在某一个类内部,运用先前定义的委托类型实例化一个委托对象MyObjdelegate,并为其挂载一个与之委托类型(无返回值,无参数)相符的自定义方法MyFun(),这也就是所谓“将方法MyFun()的相关细节包装于委托实例MyObjdelegate中”。而后即可在相应的按钮单击事件中利用委托对象MyObjdelegate调用其已经包装的方法MyFun()了。
以上即为由委托定义而得来的委托的简单用法。不过,以上这个实例显然没有什么实际用途,因为不涉及类间的相互调用,我们大可在事件中直接调用本类的方法MyFun(),而不必再多绕个弯依靠委托来实现。
不过,如果涉及到跨类的方法调用时,使用委托会怎么样呢?
2.使用本类的委托对象包装其他类的方法
namespace MulClsDelegate
{
delegate void MyDelegete();
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private MyDelegete MyObjdelegate = new MyDelegete(ObjCls.MyFun);
private void button1_Click(object sender, EventArgs e)
{
MyObjdelegate();
}
}
public class ObjCls
{
static public void MyFun()
{
MessageBox.Show("委托挂载的事件调用成功!");
}
}
}
更多精彩
赞助商链接