当前位置: 首页 > news >正文

昆明网站的建设淘客招商网站选品库建设

昆明网站的建设,淘客招商网站选品库建设,公司管理系统的好处,青岛网站建设比较好简单的概念#xff0c;也需要经常看看。一、前言先简单说说Delegate的由来。最早在C/C中#xff0c;有一个概念叫函数指针。其实就是一个内存指针#xff0c;指向一个函数。调用函数时#xff0c;只要调用函数指针就可以了#xff0c;至于函数本身的实现#xff0c;可以放… 简单的概念也需要经常看看。 一、前言先简单说说Delegate的由来。最早在C/C中有一个概念叫函数指针。其实就是一个内存指针指向一个函数。调用函数时只要调用函数指针就可以了至于函数本身的实现可以放在其它地方也可以后实现。到了.Net没有指针的概念了但这种方式很实用所以这个概念也保留了下来形成了现在的委托Delegate。另外在.Net中也把委托延伸了与执行回调设计成了同一种机制允许开发者定义回调的签名和类型。当我们声明一个委托时编译器会生成一个从MulticastDelegate派生的类。MulticastDelegate还包含几个方法不过因为这些方法是CLR运行时动态生成的代码IL中看不到也不需要关心。 委托最大的特性是不需要进行强耦合。所以调用者其实并不知道所调用的是静态方法还是实例方法也不知道具体调用的内容。举个常见的例子UI编程中的按钮Button类。按钮类本身并不知道它的OnClick事件是如何处理的也不需要知道。所以实际中OnClick事件就是使用委托发布的。开发者在开发过程中实现OnClick事件的处理并由UI订阅使用。这种方式就是委托对类的解耦。二、简单委托委托有一个非常简单的规则就是要引用的方法的返回类型或参数要与委托类型声明相匹配。听着有点绕口我们拿一个例子来说。我们有一个方法void PrintInfo(string message); 按照规则这个方法对应的委托方法可以写成void Delegate_PrintInfo(string message); 这样按照规则委托使用时就可以写成Delegate_PrintInfo  PrintInfo; 这样当我们调用Delegate_PrintInfo(Hello WangPlus)的时候实际执行的是PrintInfo(Hello WangPlus)了。 下面我们来看看委托的声明。public delegate int Delegate_Method(int x, int y);   委托可以封装任何方法。在上面这个例子里我们接受两个参数并返回一个int值。在这样一个声明中delegate是一个关键词表明我们声明的是一个委托。而其它部分跟我们正常的代码方式没有任何区别。多举几个例子看看public delegate void Demo_Func1(string para); public delegate ClassA Demo_Func2(ClassB para); private delegate StructA Demo_Func3(int para); 除了delegate其它内容跟正常方法没有区别。 声明有了如何用呢看例子class Program {public delegate int Delegate_Method(int x, int y);static void Main(string[] args){Delegate_Method handler  SumMethod;int result  handler(3, 4);}static int Sum(int x, int y){return x  y;} } 这是一个简单的例子。我们先定义了一个委托接受两个参数并返回int值。我希望这个委托调用下面的Sum方法因此Sum方法和委托Delegate_Method的签名参数和返回值兼容。这儿要注意理解这个兼容的概念不是完全相同是兼容。 再写个稍微复杂一点的例子public delegate void Delegate_Method(int x, int y);class ExampleClass {public void Sum(int x, int y){Console.WriteLine(x  y);}public void Sub(int x, int y){Console.WriteLine(x - y);} } class Program {static void Main(string[] args){ExampleClass example  new ExampleClass();Delegate_Method delegate_1;Delegate_Method delegate_2;delegate_1  example.Sum;delegate_2  example.Sub;delegate_1(100, 50);delegate_2(100, 50);} } 如果第一个例子明白了那这个例子也不难理解。三、委托链委托链的核心的维护一个可调用的委托列表。当调用列表时列表中的所有委托都会被调用。同时委托链可以使用操作符用来组合用-来删除。看例子public delegate void Delegate_Method(int x, int y);class ExampleClass {public void Sum(int x, int y){Console.WriteLine(x  y);}public void Sub(int x, int y){Console.WriteLine(x - y);} } class Program {static void Main(string[] args){ExampleClass example  new ExampleClass();Delegate_Method[] delegate_list  new Delegate_Method[] { example.Sum, example.Sub };Delegate_Method delegate_chain  delegate_list[0]  delegate_list[1];delegate_chain(100, 50);} } 在这个例子中定义了一个委托数组然后用操作符组合这些方法。Delegate_Method delegate_chain  delegate_list[0]  delegate_list[1];   Delegate_Method delegate_chain1  delegate_chain - delegate_list[0];   上面两行代码CLR将解释为(Sum Sub) - Sum并只执行Sub方法。这是一个使用-操作符从委托链中移除委托的例子。 您还可以遍历委托链public delegate void Delegate_Method(int x, int y);class ExampleClass {public void Sum(int x, int y){Console.WriteLine(x  y);}public void Sub(int x, int y){Console.WriteLine(x - y);} } class Program {static void Main(string[] args){ExampleClass example  new ExampleClass();Delegate_Method[] delegate_list  new Delegate_Method[] { example.Sum, example.Sub };Delegate_Method delegate_chain  delegate_list[0]  delegate_list[1];Delegate[] delegates  delegate_chain.GetInvocationList();for (int i  0; i  delegates.Length; i){Delegate_Method _delegate  (Delegate_Method)delegates[i];_delegate(100, 50);}} } 在这个例子中使用了GetInvocationList方法获取委托链中的所有委托。这个方法帮助我们引用委托链中的每个委托我们也可以从委托链中以任何顺序调用委托。四、多播委托委托在被调用时可以调用多个方法这称之为多播。委托对象的一个非常有用的属性是它们可以被分配给一个委托实例以便使用/-操作符进行多播。组合委托调用由它组成的多个委托。多播委托时只能组合相同类型的委托。操作符可用于从组合委托中增加/删除委托组件。此外多播委托返回类型总是void。class Program {public delegate void Delegate_Method(int x, int y);public static void Sum(int i, int j){Console.WriteLine(i  j);}public static void Sub(int i, int j){Console.WriteLine(i - j);}static void Main(string[] args){Delegate_Method delegate1, delegate2, delegate3, delegate4;delegate1  Sum;delegate2  Sub;delegate3  delegate1  delegate2;delegate3(100, 50);delegate4  delegate3 - delegate2;delegate4(100, 50);} } 这段代码里delegate3 delegate1 delegate2;等同于挨个调用Sum和Subdelegate4 delegate3 - delegate2;等同于调用(Sum Sub) - Sub实际最后调用的是Sum。五、结论委托在Dotnet里是一个很常用的代码组成。用好委托可以很漂亮地实现诸如事件、回调等操作所以必须要熟练。最后再说一下委托的基本内容委托是面向对象的操作类型安全数据安全委托派生自Dotnet的Delegate类它是一个类委托类型是密封sealed的所以不能从委托继承。喜欢就来个三连让更多人因你而受益
http://www.pierceye.com/news/938002/

相关文章:

  • 网站要怎么做才专业2022电商平台用户排行榜
  • 男男做暧网站免费网站建设期末论文
  • 电子政务门户网站建设wordpress 导入
  • 江苏建设监理协会网站网站建设siteserver
  • 家庭做网站做网站服务器可以挂到外地么
  • 做相册的网站 网易wordpress云服务器
  • 国内网站没备案自己做外贸购物网站
  • 国外h5网站模板下载长沙快速建站模板
  • 湛江网站建设方案找工程项目
  • 孝感住房和城乡建设部网站深圳市做网站公司
  • 网站开发环境配置做一个信息网站多少钱
  • 小企业网站建设的小知识wordpress显示关闭评论框
  • vue.js 可以做网站吗注册一个公司一年费用
  • 软件开发网站策划方案百度网站怎么用
  • 网站分页符素材wordpress自定义密码
  • 建设银行公积金预约网站首页大宗商品交易平台政策
  • 口碑好的秦皇岛网站建设哪里有沙漠网站建设
  • 推荐外贸网站建设的公司聊城做网站费用价格
  • 在线设计的网站android 网站开发
  • 河北省建设厅网站官网织梦手机网站制作
  • 网站建设管理物联网的发展前景
  • 广州网站建设外贸做vip视频网站赚钱吗
  • 模板网建站山西 网站制作
  • 网站建设捌金手指花总二七网页制作与设计的内容
  • 阿凡达网站建设网网络营销包括什么内容
  • 网站设计师是什么做的好的国外网站
  • 19年做网站织梦cms源码
  • 做定制网站怎么样原创网站设计
  • 淮安网站建设 淮安网站制作反向代理wordpress
  • 七台河北京网站建设深圳营销策划