作者guaz (guaz)
看板C_Sharp
標題Re: [問題] 我看不懂 => lambda
時間Sun Mar 7 15:02:16 2010
※ 引述《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