看板 C_Sharp 關於我們 聯絡資訊
※ 引述《F23ko (純潔)》之銘言: : 看了好久,還是搞不懂 lambda這個東西.... 恕刪 : public partial class Form1 : Form : { : public Form1() : { : InitializeComponent(); : this.Click += new System.EventHandler(this.點擊); 上面一行可以有很多種做法: EventHandler clickFunc = new EventHandler(this.點擊); or EventHandler clickFunc = this.點擊; or EventHandler clickFunc = new EventHandler((s, e) => { this.點擊(s, e); }); or EventHandler clickFunc = (s, e) => { this.點擊(s, e) }; or EventHandler clickFunc = (s, e) => { MessageBox.Show(((MouseEventArgs)e).Location.ToString()); }; 可以看你的需求做變化 最後加上 this.Click += clickFunc : } : private void 點擊(object sender, EventArgs e) : { : MessageBox.Show(((MouseEventArgs)e).Location.ToString()); : } : } : 那(s,e)到底是幹什麼用的??? 對照"點擊"裡的參數(sender, e) : 在前面完全沒宣告過這個東西..... : 我又怎麼會知道,這到底是幹什麼用的? this.Click的型別是delegete void EventHandler(object sender, EventArgs e) : 再者,在逐行執行的時候,我看見編譯器會回頭執行委派中Lambda右邊運算式 : 這有點像method : 但是Lambda中可以讀取外部變數,但是外部程式不能讀取Lambda中宣告的變數 : 我就不了解這到底是什麼鬼了..... 平常method裡宣告的參數外面也讀不到啊 lambda expression是給懶人用的好東西啊 :P -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 122.116.171.170 ※ 編輯: guaz 來自: 122.116.171.170 (03/07 15:14) ※ 編輯: guaz 來自: 122.116.171.170 (03/07 15:19)
F23ko:但是委派可以讀到外面的參數 @@.... 03/07 16:16
guaz:這是花括弧裡面跟外面的差別 03/07 18:10
guaz:出到花括弧外面變數就被釋放掉了 03/07 18:13
guaz:之所以能讀到外面, 是因為還包在上一層裡面 03/07 18:14
F23ko:原來如此.... method 因為已經出了大括弧,所以讀不到,lam 03/07 18:19
F23ko:bda因為還在裡面 所以可以讀 03/07 18:19