首页后端开发ASP.NET.net 1.x中的委托实例详解

.net 1.x中的委托实例详解

时间2024-01-30 11:17:02发布访客分类ASP.NET浏览786
导读:收集整理的这篇文章主要介绍了.net 1.x中的委托实例详解,觉得挺不错的,现在分享给大家,也给大家做个参考。 上一篇已经演示了使用委托实现一个多语言问候的程序,这一篇文章来总结一下在.net 1.x中委托的使用方法。 既然委托是一个类...
收集整理的这篇文章主要介绍了.net 1.x中的委托实例详解,觉得挺不错的,现在分享给大家,也给大家做个参考。  上一篇已经演示了使用委托实现一个多语言问候的程序,这一篇文章来总结一下在.net 1.x中委托的使用方法。

  既然委托是一个类型(class),那么它就要经历像类一个先声明,然后new一个对象,最后调用的过程。

.net 1.x中的委托

在.net 1.x中委托的使用是这样的,如下代码:

 1 namespace DelegateDemo 2 {
     3     //声明委托 4     public delegate void MyDel(string arg1, string arg2);
 5  6     class PRogram 7     {
 8         static void Main(string[] args) 9         {
    10             //.net 1.x中的委托11             Class1 c1 = new Class1();
    12 13             //创建委托对象14             MyDel myDel1 = new MyDel(c1.InstanceMethod);
    //实例方法15             MyDel myDel2 = new MyDel(Class1.StaticMethod);
    //静态方法16 17             //调用委托18             myDel1("a", "b");
    //或者myDel1.Invoke("a", "b");
    19             myDel2("a", "b");
    //或者myDel2.Invoke("a", "b");
    20 21             Console.ReadKey();
22         }
23     }
24 25     public class Class126     {
27         public void InstanceMethod(string arg1, string arg2)28         {
29             Console.WrITeLine(string.Format("arg1:{
0}
,arg2:{
1}
    ", arg1, arg2));
30         }
31 32         public static void StaticMethod(string arg1, string arg2)33         {
34             Console.WriteLine(string.Format("arg1:{
0}
,arg2:{
1}
    ", arg1, arg2));
35         }
36     }
37 }
    

从上面代码可以总结:

1,委托既可以接受实例方法,也可以接受静态方法,只要方法的签名和返回值类型与委托匹配即可。

2,调用委托有两种方法,第1种本质上也是调用委托的Invoke方法。

赋值委托

上面是使用new DelegateTyPE()的方式创建委托的,其实可以使用更简单的方式来创建委托的。上面的创建委托的代码可以简化为:

1 //创建委托对象2 MyDel myDel1 = c1.InstanceMethod;
    //实例方法3 MyDel myDel2 = Class1.StaticMethod;
    //静态方法

为委托增加和移除方法

上面的例子,创建委托时只初始化了一个方法,其实委托可以添加多个方法的,添加方法通过'+=',移除方法通过'-='来实现,如下代码:

1 //创建委托对象2 MyDel myDel = c1.InstanceMethod;
    3 myDel += c1.InstanceMethod2;
    4 myDel += Class1.StaticMethod;
    5 myDel += Class1.StaticMethod2;
    

1,由多个委托组成的就是链式委托(或称多播委托),System.MulticastDelegate类便是为链式委托而设计的。

2,+=本质上调用的是Delegate.COMbine方法。

调用委托

调用委托跟调用方法一样简单,只需要传入委托要求的参数,这些参数将用于调用委托的方法列表中的每一个方法,并且是依次序调用,如下代码:

1 //调用委托2 myDel("aaa","bbb");
    

链式委托之所以能够依次调用,原因是System.MulticastDelegate内部维护了一个指向下一个委托的指针。

输出结果:

注意:

1,如果为委托添加了多个相同的方法,那么这些方法都会被重复调用。

2,如果委托有返值,并且委托的调用方法列表中包含多个方法,那么只会返回最后一个方法的返回值,其它的返回值都会被忽略。

最后用XMind来总结一下:

以上就是.net 1.x中的委托实例详解的详细内容,更多请关注其它相关文章!

声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!

.net中的

若转载请注明出处: .net 1.x中的委托实例详解
本文地址: https://pptw.com/jishu/592449.html
javascript怎么将数字转为字符 javascript怎么把指定值放入div中

游客 回复需填写必要信息