199. EventHandler{TEventArgs} delegate

מאז שנוצרו Generics, נחסך מאיתנו לכתוב הרבה מאוד טיפוסים.

בין השאר, אפשר ליצור Delegateים גנריים, וכך לחסוך כתיבת הרבה Delegateים. (ראו גם טיפים 46-47)

Delegate מצוינים לדוגמה זו הם Delegateים המשמשים אותנו לצורך EventHandlerים:

הם Delegateים מהצורה:

1
2
public delegate void MouseEventHandler(object sender, MouseEventArgs e);
public delegate void KeyEventHandler(object sender, KeyEventArgs e);

כלומר לא מחזירים ערך ומקבלים object וטיפוס שיורש מEventArgs.

בFramework אכן ניצלו עובדה זו ויצרו EventHandler גנרי:

1
public delegate void EventHandler<TEventArgs>(object sender, TEventArgs e) where TEventArgs : EventArgs;

בMSDN ממליצים להשתמש בDelegate זה לשימוש בEventים שלנו.

למען האמת, מיקרוסופט באמת התמידה להשתמש בDelegate זה בקוד שפותח אחרי Framework 2.0 ואכן אם נסתכל על Eventים מWCF או WorkFlow הם באמת משתמשים בטיפוס EventHandler<TEventArgs>.

משום מה בטכנולוגיה WPF שיצאה כבר בFramework 3.0 (סמוך לWCF), אין שימוש בDelegate זה עבור אירועים, אלא משתמשים בDelegate מיוחד עבור כל סוג אירוע…

המשך יום חסר שכפול קוד טוב

שתף