WEB开发网
开发学院软件开发C语言 我眼中委托的真正面貌(一) 阅读

我眼中委托的真正面貌(一)

 2009-05-07 08:26:53 来源:WEB开发网   
核心提示: 首先,我们定义委托类型void MyDelegete();这里有必要强调一下委托的声明规则:委托使用关键字delegate来声明,我眼中委托的真正面貌(一)(2),因其本身就是一种类型,故可以在类内声明,而不必再多绕个弯依靠委托来实现,不过,亦可以独立于类而声明,关键字之后是此委托类型的实

首先,我们定义委托类型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("委托挂载的事件调用成功!");

        }

    }

}

上一页  1 2 3 4 5 6 7  下一页

Tags:眼中 委托 真正

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接