ฟังก์ชันการโทรกลับเป็นส่วนสำคัญของการเขียนโปรแกรม Windows หากคุณมีพื้นฐานการเขียนโปรแกรม C หรือ C++ แสดงว่าคุณใช้การเรียกกลับใน Windows API จำนวนมาก หลังจากเพิ่มคำสำคัญ AddressOf ลงใน VB แล้ว นักพัฒนาและนักพัฒนาสามารถใช้ประโยชน์จาก API ที่ครั้งหนึ่งเคยถูกจำกัดได้ จริงๆ แล้วฟังก์ชันการโทรกลับเป็นตัวชี้ไปยังการเรียกใช้เมธอด หรือที่เรียกว่าตัวชี้ฟังก์ชัน ซึ่งเป็นคุณลักษณะการเขียนโปรแกรมที่ทรงพลังมาก .NET ใช้แนวคิดของตัวชี้ฟังก์ชันในรูปแบบของผู้รับมอบสิทธิ์ สิ่งที่พิเศษเกี่ยวกับพวกเขาก็คือ ผู้รับมอบสิทธิ์ .NET นั้นไม่เหมือนกับตัวชี้ฟังก์ชัน C ตรงที่เป็นประเภทที่ปลอดภัย นี่แสดงให้เห็นว่าตัวชี้ฟังก์ชันในภาษา C เป็นเพียงตัวชี้ไปยังหน่วยเก็บข้อมูล เราไม่สามารถบอกได้ว่าตัวชี้นี้ชี้ไปที่อะไร นับประสาอะไรกับพารามิเตอร์และประเภทการส่งคืน ตามที่อธิบายไว้ในบทนี้ ผู้รับมอบสิทธิ์ .NET ทำงานเป็นการดำเนินการที่ปลอดภัยต่อประเภท ด้านล่างนี้เราจะเรียนรู้ว่า .NET ใช้ผู้รับมอบสิทธิ์เป็นวิธีในการดำเนินกิจกรรมอย่างไร
1. การมอบหมาย
เมื่อคุณต้องการส่งผ่านวิธีการไปยังวิธีอื่น คุณต้องใช้ผู้รับมอบสิทธิ์ เพื่อให้เข้าใจความหมาย โปรดดูโค้ดต่อไปนี้:
int i = int.Parse("99");
เราคุ้นเคยกับการส่งข้อมูลเป็นพารามิเตอร์ไปยังเมธอด ดังที่แสดงในตัวอย่างด้านบน ดังนั้นการส่งผ่านวิธีอื่นไปยังวิธีหนึ่งจึงฟังดูแปลกเล็กน้อย บางครั้งการดำเนินการที่ทำโดยวิธีหนึ่งไม่ได้ดำเนินการกับข้อมูล แต่ดำเนินการด้วยวิธีอื่นซึ่งซับซ้อนกว่า เราไม่รู้ว่าวิธีที่สองคืออะไร ณ เวลาคอมไพล์ ข้อมูลนี้สามารถรับได้เฉพาะตอนรันไทม์เท่านั้น ดังนั้นเราจึงต้องส่งวิธีที่สองเป็นพารามิเตอร์ไปยังวิธีแรก ซึ่งฟังดูน่าสับสน ต่อไปนี้คือตัวอย่างบางส่วน: : :
1. เริ่มเธรด ----- ใน C# คุณสามารถบอกให้คอมพิวเตอร์รันลำดับการดำเนินการใหม่บางอย่างพร้อมกันได้ ลำดับนี้เรียกว่าเธรด ใช้เมธอด Start() บนอินสแตนซ์ของ System.Threading.Thread ที่สะสมเพื่อเริ่มดำเนินการเธรด หากคุณต้องการบอกให้คอมพิวเตอร์เริ่มลำดับใหม่ของการดำเนินการ คุณต้องระบุตำแหน่งที่จะดำเนินการตามลำดับ คอมพิวเตอร์จะต้องได้รับรายละเอียดของวิธีการเพื่อเริ่มดำเนินการ เช่น วิธีการ Thread.Start() ต้องใช้พารามิเตอร์ที่กำหนดวิธีการที่จะเรียกโดยเธรด
2. คลาสไลบรารีทั่วไป------มีไลบรารีจำนวนมากที่มีโค้ดเพื่อทำงานมาตรฐานต่างๆ ห้องสมุดเหล่านี้มักจะมีอยู่ในตัวเอง ด้วยวิธีนี้เมื่อเขียนห้องสมุดคุณจะรู้วิธีการปฏิบัติงาน แต่บางครั้งงานก็มีงานย่อยด้วย เฉพาะโค้ดไคลเอ็นต์ที่ใช้ไลบรารีเท่านั้นที่ทราบวิธีดำเนินการงานย่อยเหล่านี้ ตัวอย่างเช่น เขียนคลาสที่รับอาร์เรย์ของอ็อบเจ็กต์และเรียงลำดับจากน้อยไปหามาก อย่างไรก็ตาม ส่วนหนึ่งของกระบวนการเรียงลำดับเกี่ยวข้องกับการนำออบเจ็กต์สองตัวกลับมาใช้ใหม่ในอาเรย์ โดยเปรียบเทียบเพื่อดูว่าอันไหนควรมาก่อน หากคุณกำลังเขียนคลาสที่ต้องสามารถจัดเรียงอาร์เรย์ของวัตถุใดๆ ได้ คุณจะไม่สามารถบอกคอมพิวเตอร์ล่วงหน้าได้ว่าควรเปรียบเทียบวัตถุอย่างไร รหัสไคลเอนต์ที่จัดการอาร์เรย์ของวัตถุในคลาสจะต้องบอกคลาสถึงวิธีเปรียบเทียบวัตถุที่จะเรียงลำดับ กล่าวอีกนัยหนึ่ง รหัสไคลเอ็นต์จะต้องส่งรายละเอียดบางอย่างไปยังชั้นเรียนที่จะทำให้สิ่งนี้เหมาะสม
3. เหตุการณ์ ------ โดยทั่วไปจะแจ้งรหัสของเหตุการณ์ที่เกิดขึ้น การเขียนโปรแกรม GUI ส่วนใหญ่เกี่ยวกับการจัดการเหตุการณ์ เมื่อมีเหตุการณ์เกิดขึ้น รันไทม์จำเป็นต้องรู้ว่าควรดำเนินการด้วยวิธีใด ซึ่งต้องส่งผ่านวิธีการที่จัดการเวลาเป็นพารามิเตอร์ของผู้รับมอบสิทธิ์ สิ่งเหล่านี้จะมีการหารือในภายหลัง
ก่อนหน้านี้ เราได้กำหนดกฎไว้ว่าบางครั้งชื่อวิธีการจะถูกส่งเป็นอาร์กิวเมนต์ไปยังวิธีอื่น จำเป็นต้องระบุด้านล่างว่าจะดำเนินการตามกระบวนการนี้อย่างไร วิธีที่ง่ายที่สุดคือการส่งชื่อวิธีการเป็นพารามิเตอร์ ตัวอย่างเช่น ในตัวอย่างเธรดก่อนหน้านี้ สมมติว่าเธรดใหม่เริ่มต้นขึ้นแล้ว และมีเมธอดที่เรียกว่า EntryPoint() ซึ่งเป็นที่ที่เธรดเริ่มทำงาน
เป็นโมฆะจุดเข้าใช้งาน ()
-
//ทำทุกอย่างที่เธรดใหม่ต้องทำ
-
คุณยังสามารถใช้รหัสต่อไปนี้เพื่อเริ่มดำเนินการเธรดใหม่:
เธรด NewThread = เธรดใหม่ ();
Thread.Start (จุดเข้าใช้งาน); // ผิด
อันที่จริงแล้ว นี่เป็นวิธีที่ง่ายมาก ซึ่งเป็นวิธีที่ใช้ในบางภาษา เช่น C และ C++ (ใน C และ C++ พารามิเตอร์ EntryPoint คือตัวชี้ฟังก์ชัน)
แต่วิธีการโดยตรงนี้อาจทำให้เกิดปัญหาบางอย่าง เช่น ความปลอดภัยของประเภท เมื่อทำการเขียนโปรแกรมเชิงวัตถุ วิธีการเหล่านี้มักจะต้องเชื่อมโยงกับอินสแตนซ์ของคลาสก่อนจึงจะถูกเรียก และวิธีนี้ไม่ได้คำนึงถึงปัญหานี้ ดังนั้น .NET Framework ทางวากยสัมพันธ์ไม่อนุญาตให้ใช้แนวทางโดยตรงนี้ หากคุณต้องการส่งเมธอด คุณต้องสรุปรายละเอียดของเมธอดในออบเจ็กต์ชนิดใหม่ ซึ่งก็คือผู้รับมอบสิทธิ์ ผู้รับมอบสิทธิ์เป็นเพียงวัตถุชนิดพิเศษ สิ่งพิเศษคือวัตถุทั้งหมดที่เรากำหนดไว้ก่อนหน้านี้มีข้อมูล ในขณะที่ผู้รับมอบสิทธิ์มีเพียงรายละเอียดของวิธีการเท่านั้น
-