c#委托引用与取消引用注意事项

本文讲解了在C#中使用委托时,同一方法被多次引用的情况,并强调了解除引用时次数的重要性。若解除引用次数不足,会导致运行时抛出NullReferenceException异常。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

先说结论:C#委托时同一方法可引用多次,取消引用时次数必须==引用的次数。比如:

void Start() {
            //此处up和down分别被引用了两次。
            cListDown += OnDownPage;
            cListDown += OnDownPage;
            cListUp += OnUpPage;
            cListUp += OnUpPage;
    }
  void OnDestroy() {
        //取消引用时也写了相应多的次数。
        cListDown -= OnDownPage;
        cListUp -= OnUpPage;
        cListDown -= OnDownPage;
        cListUp -= OnUpPage;
    }

如此写才是正确的。如果取消引用时少写了一次,则会报以下错误。

09-08 16:45:29.396: I/Unity(4230): NullReferenceException
09-08 16:45:29.396: I/Unity(4230):   at CommonListMove.OnDownPage () [0x00000] in <filename unknown>:0 
09-08 16:45:29.396: I/Unity(4230):   at (wrapper delegate-invoke) System.Action:invoke_void__this__ ()
09-08 16:45:29.396: I/Unity(4230):   at (wrapper delegate-invoke) System.Action:invoke_void__this__ ()
09-08 16:45:29.396: I/Unity(4230):   at (wrapper delegate-invoke) System.Action:invoke_void__this__ ()
09-08 16:45:29.396: I/Unity(4230):   at SliderController.SlideAlgorithm () [0x00000] in <filename unknown>:0 
09-08 16:45:29.396: I/Unity(4230):   at SliderController.Update () [0x00000] in <filename unknown>:0 
09-08 16:45:29.396: I/Unity(4230):  

具体原因等项目结束以后再探究,总之现在知道取消引用次数少了会报错,项目中要注意一下这个问题,当然最好的情况是不要多次引用。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值