c#委託引用與取消引用注意事項
阿新 • • 發佈:2019-01-21
先說結論: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):
具體原因等專案結束以後再探究,總之現在知道取消引用次數少了會報錯,專案中要注意一下這個問題,當然最好的情況是不要多次引用。