[問題] 關於Delegate與Lambda的結合應用Bug

看板C_Sharp (C#)作者 (楊伯)時間10年前 (2014/10/08 20:03), 10年前編輯推噓1(1014)
留言15則, 2人參與, 最新討論串1/1
小弟附上一份我實現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

10/08 23:27, , 1F
因為你在28行Set(myAction)的時候
10/08 23:27, 1F

10/08 23:28, , 2F
裡面只有combine _A跟_B並沒有_C
10/08 23:28, 2F

10/08 23:32, , 3F
然後invodker沒有串聯,純粹是執行你Action的結果
10/08 23:32, 3F

10/09 09:37, , 4F
我原本的預期是,delegate是call be ref,所以我把他
10/09 09:37, 4F

10/09 09:37, , 5F
送進去lambda的method裡面之後,我如果再對deleaget
10/09 09:37, 5F

10/09 09:38, , 6F
增加method的話,我覺得應該要加的上去的,但是似乎
10/09 09:38, 6F

10/09 09:38, , 7F
變成是call by value了!?
10/09 09:38, 7F
※ 編輯: yan04870449 (218.166.45.149), 10/09/2014 09:41:11

10/09 12:13, , 8F
這部分可能還是要請高手來解釋. 就我看完資料的感覺
10/09 12:13, 8F

10/09 12:13, , 9F
delegate call be ref 是指他在呼叫函數的時候是by ref
10/09 12:13, 9F

10/09 12:15, , 10F
也就是delegate 存放的是函數的point 而不是存函數 value
10/09 12:15, 10F

10/09 12:16, , 11F
http://0rz.tw/ZbE8A 這位大大第一句話就有點類似我的想法
10/09 12:16, 11F

10/09 12:16, , 12F
也許你可以留言再詢問他一下
10/09 12:16, 12F

10/09 12:39, , 13F
你可以看這篇 http://0rz.tw/PGx7a
10/09 12:39, 13F

10/09 12:40, , 14F
因為VB的寫法跟C#有點不一樣,可是看VB的Keyword就比較了解
10/09 12:40, 14F

10/09 12:40, , 15F
也謝謝你讓我複習了一下委派 XD
10/09 12:40, 15F
文章代碼(AID): #1KDIW15G (C_Sharp)
文章代碼(AID): #1KDIW15G (C_Sharp)