1. 程式人生 > >c#委託引用與取消引用注意事項

c#委託引用與取消引用注意事項

先說結論: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):

具體原因等專案結束以後再探究,總之現在知道取消引用次數少了會報錯,專案中要注意一下這個問題,當然最好的情況是不要多次引用。