看板 C_Sharp 關於我們 聯絡資訊
小弟附上一份我實現Bug的Code,我認為這應該不是Bug 而是我哪邊認知有錯。 雖然我是在Unity裡面執行的,但是我想在VS裡面應該也是一樣結果 以下是程式碼連結 https://gist.github.com/anonymous/4f06c028f7688c8047b1 以下是執行結果(Unity平台) A:-1254341580 B:-1254341612 C:-1254341516 myAction 1:-1254341580 myAction 2:-1254341612 SET :-1254341612 myAction 3:-1254341612 myAction 4:-1254341612 iAction:-1254341612 A B myAction 5:-1254341612 myAction----- C B A 問題就是當invodker被呼叫的時候,只有執行到A跟B,我的認知 應該是要連C也一起被呼叫到。 為此我有把IL編譯出來看,我發現似乎跟System.Delegate::Combine的 運作原理有關,但是我實在是看不出甚麼端倪,請版上前輩指教一下怎麼 會發生這種現象 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 218.166.45.149 ※ 文章網址: http://www.ptt.cc/bbs/C_Sharp/M.1412769793.A.150.html
a926: 因為你在28行Set(myAction)的時候 10/08 23:27
a926: 裡面只有combine _A跟_B並沒有_C 10/08 23:28
a926: 然後invodker沒有串聯,純粹是執行你Action的結果 10/08 23:32
yan04870449: 我原本的預期是,delegate是call be ref,所以我把他 10/09 09:37
yan04870449: 送進去lambda的method裡面之後,我如果再對deleaget 10/09 09:37
yan04870449: 增加method的話,我覺得應該要加的上去的,但是似乎 10/09 09:38
yan04870449: 變成是call by value了!? 10/09 09:38
※ 編輯: yan04870449 (218.166.45.149), 10/09/2014 09:41:11
a926: 這部分可能還是要請高手來解釋. 就我看完資料的感覺 10/09 12:13
a926: delegate call be ref 是指他在呼叫函數的時候是by ref 10/09 12:13
a926: 也就是delegate 存放的是函數的point 而不是存函數 value 10/09 12:15
a926: http://0rz.tw/ZbE8A 這位大大第一句話就有點類似我的想法 10/09 12:16
a926: 也許你可以留言再詢問他一下 10/09 12:16
a926: 你可以看這篇 http://0rz.tw/PGx7a 10/09 12:39
a926: 因為VB的寫法跟C#有點不一樣,可是看VB的Keyword就比較了解 10/09 12:40
a926: 也謝謝你讓我複習了一下委派 XD 10/09 12:40