ฉันค่อนข้างมีความสุขกับความเข้าใจโมเดลเหตุการณ์. NET ฉันคิดว่าฉันอาจเข้าใจผิดถึงความแตกต่างเล็กน้อยของระบบ
เมื่อฉันเริ่มวางกิจกรรมลงในชั้นเรียนของฉันฉันจะใช้วิธีมาตรฐานดังนี้:
public event EventHandler<MyEventArgs> MyEvent;
นี่หมายความว่าทุกสิ่งที่สมัครรับกิจกรรมจะต้องมีวิธีการดังนี้:
void HandleThatEvent(object sender, MyEventArgs args){...}
ซึ่งเป็นสิ่งที่ดี แต่ฉันพบว่าฉันไม่ค่อยสนใจผู้ส่งดังนั้นจึงทำให้มีวิธีการมากมายในการลงลายมือชื่อ
ดังนั้นฉันจึงเปลี่ยนเป็นการประกาศประเภทตัวแทนของฉันเอง
public delegate void MyEventHandler(SomeClass argument);
ซึ่งลดความยุ่งเหยิง แต่ทิ้งฉันด้วยปัญหาเล็ก ๆ เมื่อมันมาถึงการเขียนจัดการ:
eventImplmentor.MyEvent += HandleThatEvent;
.
.
.
void HandleThatEvent(/*oh, um, what arguments does it take? Intellisense isn't telling me*/)
ดังนั้นฉันจะต้องกลับไปที่การประกาศของผู้ได้รับมอบหมายและมองแล้วกลับไปและเขียนพวกเขาในหรือรวบรวมและรอที่จะบอก
ดังนั้นตอนนี้แทนฉันเพียงแค่ใช้Action
, Action<T>
หรือสิ่งที่เหมาะกับแม่แบบ
public event Action<SomeClass> MyEvent;
เพื่อให้ฉันสามารถวางเมาส์เหนือเหตุการณ์และได้รับการบอกพารามิเตอร์ที่คาดหวัง
คำถามของฉันหลังจากทั้งหมด: มีวิธีปฏิบัติที่ดีที่สุดสำหรับการประกาศเหตุการณ์ใน C # หรือไม่ ฉันควรจะกลับไปที่EventHandler<T>
ทางหรือเป็นAction<T>
ที่ยอมรับ?