网创优客建站品牌官网
为成都网站建设公司企业提供高品质网站建设
热线:028-86922220
成都专业网站建设公司

定制建站费用3500元

符合中小企业对网站设计、功能常规化式的企业展示型网站建设

成都品牌网站建设

品牌网站建设费用6000元

本套餐主要针对企业品牌型网站、中高端设计、前端互动体验...

成都商城网站建设

商城网站建设费用8000元

商城网站建设因基本功能的需求不同费用上面也有很大的差别...

成都微信网站建设

手机微信网站建站3000元

手机微信网站开发、微信官网、微信商城网站...

建站知识

当前位置:首页 > 建站知识

C#如何实现委托

这篇文章主要介绍了C#如何实现委托,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。

宁陵网站建设公司成都创新互联,宁陵网站设计制作,有大型网站制作公司丰富经验。已为宁陵成百上千家提供企业网站建设服务。企业网站搭建\外贸网站建设要多少钱,请找那个售后服务好的宁陵做网站的公司定做!

    我们首先来看一个非常简单的例子:

namespace LinQ  {      //声明一个委托,这个委托可以指向任何传入两个整数并且返回一个整数的方法      public delegate int MathOP(int i, int j);        //这个类包含了MathOP将指向的方法Add      class DelegateMath       {          public static int Add(int i, int j) { return i + j; }      }        class Program      {          static void Main(string[] args)          {              //创建一个指向DelegateMath.Add()的委托              MathOP o = new MathOP(DelegateMath.Add);              //使用委托间接调用Add()方法              Console.WriteLine("10+20={0}",o(10,20));              //或者可以这样,如果不清楚o.Invoke,请继续往下看。如果您知道了,那这篇文章就可以忽略了             Console.WriteLine("10+20={0}", o.Invoke(10, 20));             Console.ReadLine();          }      }  }

运行结果是:

C#如何实现委托

    由这个简单的例子可见委托的使用非常简单,如果要将目标对象方法插入指定委托,只要向委托的构造函数传入方法名即可,当然这个方法要与定义这个委托时的返回值,参数类型以及个数都完全一样。这是我们就可以使用类似直接函数调用的语法来调用指向的成员:DelegateMath.Add(int i,int j);

    我们接着深入的讨论一下这个委托。东西嘛,不能光看表面,尤其是社会上的淫。不多说,"深入"之,先看一副图:

C#如何实现委托

这是一个反编译工具经过反编译之后出来的结果,主要看中间选中的那个LinQ.MathOP,这是我们定义的委托,它是一个类,但是我们并没有为这个类添加了那么多的不知道从哪里来的方法啊。其实当C#编译器处理委托类型时,它会先自动生成一个派生自System.MulticastDelegate的密封类。这个类与它的基类:System.Delegate一起为委托提供必要的基础设施。可以看到生成的MathOP类定义了三个公共方法。Invoke应该是核心方法,因为它被用来以同步的方式调用委托类型维护的每个方法,这里所谓的同步就是指调用者必须等待调用完成才能继续进行。BeginInvoke()和EndInvoke()方法能在第二个执行线程上异步调用当前的方法,这两个方法主要用在多线程上面,现在大家只要知道有这么个东西就行了,以后的博文会有持续的说明。 LinQ.MathOP的伪代码应该是这样的:

sealed class MathOP:System.MulticastDelegate {     public MathOP(object target,uint functionAddress);     public int Invoke(int i,int j);     public IAsyncResult BeginInvoke(int i,int j,AsyncCallback cb,object state);     public int EndInvoke(IAsyncResult result); }

    最后说明一下,委托还可以指向任意数量的out或ref参数(以及用params关键字标记的数组)的方法。如果包含了out或者ref参数,Invoke()以及BeginInvoke()方法的签名是一样的,但是EndInvoke()方法稍有变化,其中包括了委托类型定义的所有out或ref参数,当然,这个不需要我们的关心。

感谢你能够认真阅读完这篇文章,希望小编分享的“C#如何实现委托”这篇文章对大家有帮助,同时也希望大家多多支持创新互联,关注创新互联行业资讯频道,更多相关知识等着你来学习!


网站栏目:C#如何实现委托
文章路径:http://bjjierui.cn/article/iisoip.html

其他资讯