ตัวแทนดำเนินการ Delegates
posted on 13 Jun 2008 07:42 by xnanoob in Tutorials
ดีค่า วันนี้ว่าจะมาหัดเรื่องของ delegate นะค่ะ ความจริงเมื่อวานก็ลองไปอ่านๆ ดูจากหลายๆ เว็บๆ ความหมายที่พอจะอธิบายให้ตัวเราเองสามารถเข้าใจได้มากที่สุด ก็ไปเจอมาประโยคหนึ่ง เค้าก็จะบอกว่า delegate เนี้ยเป็นการปกปิดข้อมูลในส่วนของการที่จะไปเรียก method คือปกปิดว่าตอนเนี้ย method ที่คุณเรียกใช้อยู่นะ คือ method อะไร โดยใช้ตัวแทนเป็นคนทำงาน
ยกตัวอย่างแบบบ้านๆ ก็คล้ายๆ นอมีนี อะค่ะ ที่ทำการแทนบุคคลใดบุคคลหนึ่งได้ หรือแบบวันก่อนดูข่าวเกี่ยวกับมีคนเอาเงินสองล้านไปวางไว้ที่ศาล ถามตามสามัญสำนึกใครกันแน่ที่จะเอาเิงินขนาดสองล้านไปวางลืมไว้ เจ้าของเงินคนอาจจะไม่ใช่คนที่เอาเงินมาวาง แต่อาจะใ้ช้ตัวแทน หรือจ้างนอมีนีมาทำการแทน เพราะดููจากข่าว ถ้าทนายเป็นคนทำจะโดนยึดพวกใบอนุญาติด้วย คงไม่โง่อะไรขนาดนั้น เพราะฉะนั้นเนี้ยแระ ที่เรียกว่า คนดำเนินการแทน หรือตัวแทน หรือ delegates
แต่การที่จะบอกว่าใครไปทำอะไรได้นั้น ก็ต้องกำหนดชนิดของตัวแทนและชนิดของสิ่งที่จะให้ทำแทน โดยจะทำการอ้างผ่าน signature ของ method และ delegate นั้นเอง
ซึ่งมันจะเป็นการประกาศ
จังหวะการใช้งาน
การใช้งานตัวแทน d ซ่อนหรือปกปิดการเรียก method testM
อะไรประมาณนี้ นะค่ะ
ยกตัวอย่างแบบบ้านๆ ก็คล้ายๆ นอมีนี อะค่ะ ที่ทำการแทนบุคคลใดบุคคลหนึ่งได้ หรือแบบวันก่อนดูข่าวเกี่ยวกับมีคนเอาเงินสองล้านไปวางไว้ที่ศาล ถามตามสามัญสำนึกใครกันแน่ที่จะเอาเิงินขนาดสองล้านไปวางลืมไว้ เจ้าของเงินคนอาจจะไม่ใช่คนที่เอาเงินมาวาง แต่อาจะใ้ช้ตัวแทน หรือจ้างนอมีนีมาทำการแทน เพราะดููจากข่าว ถ้าทนายเป็นคนทำจะโดนยึดพวกใบอนุญาติด้วย คงไม่โง่อะไรขนาดนั้น เพราะฉะนั้นเนี้ยแระ ที่เรียกว่า คนดำเนินการแทน หรือตัวแทน หรือ delegates
แต่การที่จะบอกว่าใครไปทำอะไรได้นั้น ก็ต้องกำหนดชนิดของตัวแทนและชนิดของสิ่งที่จะให้ทำแทน โดยจะทำการอ้างผ่าน signature ของ method และ delegate นั้นเอง
Quote
Using a delegate allows the programmer to encapsulate a reference to a method inside a delegate object.
ซึ่งมันจะเป็นการประกาศ
Code:
//ประกาศ delegate
public delegate void testD(string a);
แบบเนี้ยก็จะอ่านว่า ชั้นจะมีตัวแทนชื่อ testD โดยทำงานแทนใน method ที่มีการรับค่าเป็น string และไม่มีการคืนค่าpublic delegate void testD(string a);
Code:
class test {
//ประกาศ delegate
// รับค่าเป็น string ไม่มีการ return ค่า
public delegate void testD(string a);
//สร้าง method testM รับค่าเป็น string return ไม่มีการ return ค่า
public void testM(string a) {
Console.WriteLine(a);
}
}
//ประกาศ delegate
// รับค่าเป็น string ไม่มีการ return ค่า
public delegate void testD(string a);
//สร้าง method testM รับค่าเป็น string return ไม่มีการ return ค่า
public void testM(string a) {
Console.WriteLine(a);
}
}
จังหวะการใช้งาน
Code:
// สร้าง object test
test o = new test();
// ประกาศ delegate d เป็นตัวแทนของ testD
// โดยทำหน้าที่แทน method testM
test.testD d = new test.testD(o.testM);
test o = new test();
// ประกาศ delegate d เป็นตัวแทนของ testD
// โดยทำหน้าที่แทน method testM
test.testD d = new test.testD(o.testM);
การใช้งานตัวแทน d ซ่อนหรือปกปิดการเรียก method testM
Code:
d("hello world");
อะไรประมาณนี้ นะค่ะ
จบแระค่า บายค่ะ งุงิ
อ่านแบบมีสีได้ ที่นี้ http://www.xnanoob.com/forum/index.php?topic=15.0









