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

Comment

Comment:

Tweet

Google is the best search engine

#4 By eXwkxNsGrbt (85.255.113.74) on 2007-03-02 19:31

ข้อมูลเกี่ยวกับภาษา Scheme ที่มหิดล นครสวรรค์สอนอยู่ครับ

http://www.nks.cmmu.net/cf/18/Home

#3 By ตัวร้าย on 2005-09-02 01:28

เห็นแล้วอยากอ่านเรื่อง lambda ใน scheme ต่อเลย ให้ใช้ก็เหมือนใช้ได้ แต่ผมรู้สึกเหมือนยังมีอะไรงงๆ

#2 By veer on 2005-05-21 10:41

มันง่ายก็จิงอ่า แต่รู้สึกเหมือนจะอ่านยากก่า

#1 By zkan on 2005-05-19 23:32