C#学习笔记:使用委托将方法作为参数传递

委托可以让方法作为参数传递给其他方法。可以用一个例子阐述这一问题。

  1. 首先定义一个委托类型,代码如下:

                public delegate void MyDelegate();
    
  2. 然后在项目生成的Progran类中定义两个方法M1和M2

     static void M1()
     {
         Console.WriteLine("方法一");
     }
    
     static void M2()
     {
         Console.WriteLine("方法二");
     }
    
  3. 然后再定义一个Test方法,方法中调用委托,随后又将参数d与M2方法关联。

     static void Test(MyDelegate d)
     {
         //调用委托
         if (d != null)
         {
             d();
         }
         //改为与M2方法关联
         d = M2;
     }
    
  4. 现在来进行测试调用,声明委托变量de并与M1方法关联,然后调用Test方法,在调用完Test方法后在调用一次委托变量de。最终得出如图所示结果。

         MyDelegate de = M1;
         Test(de);
         de();
         Console.ReadKey();
    

    在这里插入图片描述
    总结:利用Test方法中代码修改了参数d,与M2方法进行了关联,但是,当方法执行完成后,在方法外再次调用de,输出的仍然是"方法1"。因此,本示例不仅演示了如果通过委托实现将方法作为参数传递,同时也说明了委托类型在传递时是进行自我复制的 。参数d在方法内部被修改,并不影响方法外部的de变量。虽然委托是引用类型,但是方法内部让委托变量与M2方法进行了关联,就等于参数d引用了新的委托实例。而外部的委托变量传递给参数d时只是把委托的地址进行了自我复制,所以方法调用完成后,外部的变量引用的仍然是原来的委托实例。

  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值