Anonymous Method
posted on 19 May 2005 18:04 by tidno1 in csharp-and-dotnetคนเคยเขียน java คงเคยได้ยิน หรือเคยใช้ anonymous class กันมาบ้างแล้ว
แต่ที่เราจะพูดถึงในวันนี้คือ anonymous method ซึ่งเป็น feature ใหม่ในตัว .NET 2.0 ซึ่งก็มีรูปแบบการเขียนคล้าย ๆ กับ anonymous class คือ ไม่จำเป็นต้องสร้าง method นั้น ๆ ไว้ แล้วค่อยเรียกใช้มัน แต่สร้างและใช้ method ใหม่ได้ทันทีในที่ต้องการ(ซึ่งแน่นอน method นั้นจะไม่สามารถอ้างถึงได้จากที่อื่นอีก)
ไปดูประโยชน์และตัวอย่างกันเลยดีกว่า
class MainForm : Form {
ListBox lstbx1;
TextBox txtbx1;
Button btnAdd;
public MainForm() {
lstbx1 = new ListBox(...);
txtbx = new TextBox(...);
btnAdd = new Button(...);
btnAdd.Click += new EventHandler(BtnAdd_Click);
}
void BtnAdd_Click(...) {
lstbx1.Items.Add(txtbx1.Text);
}
}
จะเห็นได้ว่า เราต้องสร้าง method ที่มีการใช้งานเพียงครั้งเดียว(และมี implementation แค่บรรทัดเดียว) แยกขึ้นมาต่างหาก ซึ่งมันก็ควรจะทำงานได้ง่ายกว่าดังนี้
...
btnAdd.Click += delegate(object sender, EventArgs e){
lstbx1.Items.Add(txtbx1.Text);
};
แต่ว่าความจริงแล้ว anonymous method สามารถละ signature ทิ้งไปได้
...
btnAdd.Click += delegate {
lstbx1.Items.Add(txtbx1.Text);
};
ที่เห็นคีย์เวิร์ด delegate โผล่มาอีกแล้ว เพราะการสร้าง anonymous method ก็เหมือนกับการสร้าง delegate object(ซึ่งก็คือ method นั่นแหละ) แบบ inline(โปรแกรมเมอร์ C++ ลองนึกภาพเปรียบเทียบ)
เรื่องนี้เป็นหนึ่งในซีรีส์ What 's new in C# 2.0
#1 By ZOMBIE on 2005-05-19 23:32