แผนภูมิเปรียบเทียบ
พื้นฐานสำหรับการเปรียบเทียบ | ผู้ได้รับมอบหมาย | เหตุการณ์ที่เกิดขึ้น |
---|---|---|
ขั้นพื้นฐาน | ผู้รับมอบสิทธิ์เก็บการอ้างอิงของวิธีการ | เหตุการณ์นี้เป็นสิ่งที่เป็นนามธรรมมากเกินไปที่มอบให้กับผู้ได้รับมอบหมาย |
วากยสัมพันธ์ | มอบหมาย 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 #
- ผู้รับมอบสิทธิ์เป็นวัตถุที่ใช้เป็นตัวชี้ฟังก์ชั่นเพื่อเก็บการอ้างอิงของวิธีการ ในทางกลับกันเหตุการณ์ให้สิ่งที่เป็นนามธรรมแก่ผู้ได้รับมอบหมาย
- คำหลักที่จำเป็นในการประกาศผู้รับมอบสิทธิ์เป็น ตัวแทน ในขณะที่คำหลักที่จำเป็นในการประกาศเหตุการณ์เป็น เหตุการณ์
- ผู้รับมอบสิทธิ์จะถูกประกาศนอกชั้นเรียนในขณะที่มีการประกาศเหตุการณ์ภายในชั้นเรียน
- ในการเรียกใช้เมธอดโดยใช้วัตถุผู้รับมอบสิทธิ์จะต้องมีการอ้างอิงถึงวัตถุผู้รับมอบสิทธิ์ ในทางกลับกันเมื่อต้องการเรียกใช้เมธอดโดยใช้วัตถุเหตุการณ์ต้องเรียกวิธีดังกล่าวไปยังวัตถุเหตุการณ์
- ความแปรปรวนร่วมและความแปรปรวนให้ความยืดหยุ่นเป็นพิเศษกับวัตถุผู้ร่วมประชุม ในอีกกรณีหนึ่งไม่มีแนวคิดดังกล่าว
- Event Accessor จัดการรายการตัวจัดการเหตุการณ์ในขณะที่ผู้รับมอบสิทธิ์ไม่มีแนวคิดดังกล่าว
- ผู้รับมอบสิทธิ์เป็นอิสระจากเหตุการณ์ แต่ไม่สามารถสร้างกิจกรรมได้โดยไม่ต้องมอบสิทธิ์
สรุป:
ผู้ได้รับมอบหมายมีประโยชน์ในขณะที่สนับสนุนกิจกรรมและให้ความสะดวกในการดำเนินการวิธีการที่รันไทม์ ตัวเข้าถึงเหตุการณ์อนุญาตให้เราซิงโครไนซ์ตัวจัดการเหตุการณ์ในแอปพลิเคชันมัลติเธรด