ตัวแปร delegate จึงสามารถกำหนดไปชี้ไปยังฟังก์ชั่นไหนก็ได้
ที่มีรูปแบบ arguments และ return data type ที่เหมือนกัน เช่น
เป็นการกำหนดว่ามี delegate ตัวหนึ่งชื่อ MathOperation
ที่มี function signature ที่รับ argument ชนิด double สองตัว
และให้ผลลัพธ์คืนค่าเป็น double ด้วย
ต่อมาเขียนโค้ดว่า
หมายถึงว่าตัวแปร SelectedOperation จะใช้ชี้ไปหาฟังก์ชั่นใดๆ ก็ได้ที่
มี function signature เหมือนที่กำหนดไว้ที่ delegate MathOperation
ผมอาจจะมีฟังก์ชั่นบวกเลข เช่น
Return(v1 + v2)
End Function
ก็จะเขียนโค้ดเช่นนี้ได้
และเขียนต่อไปว่า
ตัวแปร result ก็จะมีค่าเป็น 30
เพราะการเรียก SelectedOperation จริงๆ แล้ว
ก็ถูกส่งต่อไปเรียกฟังก์ชั่น Add
ถ้าเราอยากเปลี่ยน algorithm
โค้ด #2 ก็ไม่ต้องเปลี่ยนโค้ดเลย เช่น
Dim result As Double = SelectedOperation(10, 20) ‘ —- คราวนี้ได้ 200
ศึกษาต่อจากตัวอย่างโค้ดนี้ครับ
Download Sample: http://GreatFriends.Biz/Files/ExDelegate.rar
ข้อสรุปที่น่าสังเกต:
Delegate เป็นการกำหนด Interface (รูปแบบการติดต่อเรียกใช้โค้ดใดๆ)
ที่ทำให้เราเขียนโค้ดที่อิง Interface เป็นหลัก
และสามารถเปลี่ยน Implementation (ส่วนทำงานของโค้ด) ได้ในขณะรัน
หรือเป็น Polymorphism ในระดับฟังก์ชั่น
หมายเหตุ
Delegate ใช้กับ Sub หรือ Property procedure ก็ได้นะครับ
Leave a comment