แนะนำ, 2024

ตัวเลือกของบรรณาธิการ

ความแตกต่างระหว่างผู้ได้รับมอบหมายและเหตุการณ์ใน C #

การใช้ผู้รับมอบสิทธิ์และเหตุการณ์ต่าง ๆ มีบทบาทสำคัญในโปรแกรมที่ขับเคลื่อนด้วยเหตุการณ์ ผู้ได้รับมอบหมายสามารถอ้างถึงวิธีการและมันค่อนข้างคล้ายกับตัวชี้ฟังก์ชั่นใน C ++ เหตุการณ์แจ้งว่ามีการดำเนินการบางอย่างแล้ว ความแตกต่างพื้นฐานระหว่างผู้ได้รับมอบหมายและเหตุการณ์คือผู้ได้รับมอบหมายมีการอ้างอิงถึงวิธีการและเหตุการณ์ให้วิธีการเข้าถึงวิธีการนั้นโดยใช้ผู้ได้รับมอบหมาย

แผนภูมิเปรียบเทียบ

พื้นฐานสำหรับการเปรียบเทียบผู้ได้รับมอบหมายเหตุการณ์ที่เกิดขึ้น
ขั้นพื้นฐานผู้รับมอบสิทธิ์เก็บการอ้างอิงของวิธีการเหตุการณ์นี้เป็นสิ่งที่เป็นนามธรรมมากเกินไปที่มอบให้กับผู้ได้รับมอบหมาย
วากยสัมพันธ์มอบหมาย return_type delegate_name (พารามิเตอร์_list);event event_delegate event_name;
คำหลักผู้รับมอบสิทธิ์จะประกาศโดยใช้คำหลัก "ผู้รับมอบสิทธิ์"มีการประกาศเหตุการณ์โดยใช้คำหลัก "เหตุการณ์"
การประกาศผู้รับมอบสิทธิ์จะถูกประกาศนอกชั้นเรียนใด ๆมีการประกาศเหตุการณ์ภายในคลาส
ขอร้องในการเรียกใช้วิธีการนั้นจะต้องมีการส่งต่อไปยังผู้รับมอบสิทธิ์ในการเรียกใช้เมธอดจะต้องมีการกำหนดให้กับกิจกรรม
ความแปรปรวนร่วมและความแปรปรวนพวกเขาให้ความยืดหยุ่นแก่ผู้ได้รับมอบหมายไม่มีแนวคิดดังกล่าว
ตัวเข้าถึงเหตุการณ์ไม่มีแนวคิดดังกล่าวจัดการรายการตัวจัดการเหตุการณ์
เมืองขึ้นผู้ได้รับมอบหมายเป็นอิสระจากเหตุการณ์ไม่สามารถสร้างกิจกรรมโดยไม่มีผู้รับมอบสิทธิ์

คำจำกัดความของผู้ได้รับมอบหมาย

ใน C # ผู้รับมอบสิทธิ์จะใช้เป็นตัวชี้ฟังก์ชั่นเพื่ออ้างอิงวิธีการ มันเป็นวัตถุเฉพาะที่อ้างอิงถึงวิธีการที่ได้รับมอบหมาย ผู้รับมอบสิทธิ์รายเดียวกันสามารถใช้เพื่ออ้างถึงวิธีการต่าง ๆ ได้เนื่องจากสามารถเก็บการอ้างอิงของวิธีการต่าง ๆ ได้ แต่ละครั้ง วิธีการใดจะถูกเรียกใช้โดยผู้รับมอบสิทธิ์จะถูกกำหนดที่รันไทม์ ไวยากรณ์ของการประกาศผู้รับมอบสิทธิ์มีดังนี้

 มอบหมาย return_type delegate_name (พารามิเตอร์_list); 

ที่นี่ return_type ประกาศประเภทของค่าที่ส่งคืนโดยวิธีการที่เรียกว่าโดยผู้รับมอบสิทธิ์และ delegate_name เป็นชื่อของผู้รับมอบสิทธิ์ parameter_list กำหนดรายการของพารามิเตอร์ที่ต้องการโดยวิธีการที่จะถูกเรียกโดยผู้รับมอบสิทธิ์

มีประเด็นสำคัญที่ต้องจดจำเกี่ยวกับผู้ได้รับมอบหมาย มันสามารถเรียกวิธีการใด ๆ ที่ตรงกับลายเซ็นและประเภทผลตอบแทน ผู้รับมอบสิทธิ์สามารถเรียกได้ทั้งวิธีอินสแตนซ์หรือวิธีแบบคงที่ หากเรียกวิธีการอินสแตนซ์จะต้องใช้ความช่วยเหลือของวัตถุที่จะเรียกวิธีการ ผู้ได้รับการสนับสนุนสนับสนุนการทำมัลติคาสต์เช่นคุณสามารถเชื่อมโยงวิธีการที่จะถูกเรียกโดยอัตโนมัติเมื่อตัวแทนที่อ้างถึงพวกเขาถูกเรียกใช้ คุณเพียงแค่ต้องสร้างวัตถุผู้รับมอบสิทธิ์และกำหนดวิธีการอย่างใดอย่างหนึ่งให้กับห่วงโซ่โดยใช้ตัวดำเนินการ” + =” คุณยังสามารถยกเลิกการเชื่อมโยงวิธีการโดยใช้ตัวดำเนินการ“ - =”

คุณสมบัติที่เพิ่มความยืดหยุ่นให้กับผู้ร่วมประชุมคือความแปรปรวนร่วมและความแปรปรวน ความแปรปรวนร่วมและความแปรปรวนช่วยให้เงื่อนไขที่ประเภทผลตอบแทนและลายเซ็นของวิธีการที่ได้รับมอบหมายให้มีความแตกต่างจากที่ได้รับมอบหมาย

  • ความแปรปรวนร่วมช่วยให้คุณสามารถกำหนดวิธีการไปยังผู้รับมอบสิทธิ์โดยที่ return type ของวิธีนั้นเป็นคลาสที่ได้มาจากคลาสที่ระบุประเภท return ของผู้รับมอบสิทธิ์
  • Contravariance ช่วยให้คุณสามารถกำหนดวิธีการให้ผู้รับมอบสิทธิ์โดยที่ชนิดพารามิเตอร์ของวิธีนั้นเป็นคลาสพื้นฐานของคลาสที่ระบุเป็นพารามิเตอร์ของผู้รับมอบสิทธิ์

ความหมายของเหตุการณ์

เหตุการณ์คือการกระทำที่เปลี่ยนแปลงสถานะของวัตถุ มีการประกาศเหตุการณ์โดยใช้ผู้รับมอบสิทธิ์โดยไม่ต้องมีผู้รับมอบสิทธิ์คุณไม่สามารถประกาศเหตุการณ์ได้ คุณสามารถพูดได้ว่าเหตุการณ์ให้ encapsulation ให้กับผู้ได้รับมอบหมาย มีสารประกอบที่สำคัญสองอย่างเมื่อจัดการกับเหตุการณ์ที่เป็นตัวจัดการเหตุการณ์และเหตุการณ์ หากวัตถุมีความสนใจในเหตุการณ์ก็จะลงทะเบียนตัวจัดการเหตุการณ์สำหรับเหตุการณ์นั้น และเมื่อใดก็ตามที่เหตุการณ์ถูกไล่ออกตัวจัดการเหตุการณ์ที่ลงทะเบียนจะถูกเรียก การประกาศของเหตุการณ์มีดังนี้:

 event event_delegate event_name; 

ที่นี่ "เหตุการณ์" เป็นคำหลักที่แสดงการประกาศของเหตุการณ์ ถัดไป event_delegate แสดงชื่อของผู้รับมอบสิทธิ์ที่สนับสนุนเหตุการณ์ จากนั้น event_name คือชื่อของเหตุการณ์

มีประเด็นสำคัญที่ต้องจดจำในขณะที่จัดการกับเหตุการณ์ เช่นเดียวกับผู้ได้รับมอบหมายเหตุการณ์สามารถเป็นมัลติคาสต์เช่นหลายวัตถุที่ถูกล่ามโซ่ (ลงทะเบียน) กับตัวจัดการเหตุการณ์ตอบสนองเมื่อมีเหตุการณ์ยกขึ้น ตัวจัดการเหตุการณ์สามารถเพิ่มลงในห่วงโซ่โดยใช้โอเปอเรเตอร์“ + =” และสามารถยกเลิกได้โดยใช้โอเปอเรเตอร์“ - =” ทั้งวิธีคงที่และอินสแตนซ์สามารถใช้เป็นตัวจัดการเหตุการณ์ ตัวเข้าถึงเหตุการณ์สามารถให้คุณควบคุมการใช้งานรายการตัวจัดการเหตุการณ์ได้

อินเทอร์เฟซสามารถมีเหตุการณ์ เหตุการณ์สามารถเป็นนามธรรมได้ในขณะที่กิจกรรมที่ใช้ accessor นั้นไม่สามารถเป็นนามธรรมได้ เหตุการณ์สามารถเป็นเสมือนและถูกแทนที่โดยคลาสที่ได้รับ

ความแตกต่างที่สำคัญระหว่างผู้ได้รับมอบหมายและเหตุการณ์ใน C #

  1. ผู้รับมอบสิทธิ์เป็นวัตถุที่ใช้เป็นตัวชี้ฟังก์ชั่นเพื่อเก็บการอ้างอิงของวิธีการ ในทางกลับกันเหตุการณ์ให้สิ่งที่เป็นนามธรรมแก่ผู้ได้รับมอบหมาย
  2. คำหลักที่จำเป็นในการประกาศผู้รับมอบสิทธิ์เป็น ตัวแทน ในขณะที่คำหลักที่จำเป็นในการประกาศเหตุการณ์เป็น เหตุการณ์
  3. ผู้รับมอบสิทธิ์จะถูกประกาศนอกชั้นเรียนในขณะที่มีการประกาศเหตุการณ์ภายในชั้นเรียน
  4. ในการเรียกใช้เมธอดโดยใช้วัตถุผู้รับมอบสิทธิ์จะต้องมีการอ้างอิงถึงวัตถุผู้รับมอบสิทธิ์ ในทางกลับกันเมื่อต้องการเรียกใช้เมธอดโดยใช้วัตถุเหตุการณ์ต้องเรียกวิธีดังกล่าวไปยังวัตถุเหตุการณ์
  5. ความแปรปรวนร่วมและความแปรปรวนให้ความยืดหยุ่นเป็นพิเศษกับวัตถุผู้ร่วมประชุม ในอีกกรณีหนึ่งไม่มีแนวคิดดังกล่าว
  6. Event Accessor จัดการรายการตัวจัดการเหตุการณ์ในขณะที่ผู้รับมอบสิทธิ์ไม่มีแนวคิดดังกล่าว
  7. ผู้รับมอบสิทธิ์เป็นอิสระจากเหตุการณ์ แต่ไม่สามารถสร้างกิจกรรมได้โดยไม่ต้องมอบสิทธิ์

สรุป:

ผู้ได้รับมอบหมายมีประโยชน์ในขณะที่สนับสนุนกิจกรรมและให้ความสะดวกในการดำเนินการวิธีการที่รันไทม์ ตัวเข้าถึงเหตุการณ์อนุญาตให้เราซิงโครไนซ์ตัวจัดการเหตุการณ์ในแอปพลิเคชันมัลติเธรด

Top