200. ItemEventArgs{T} class

לאירועים שאנחנו מקפיצים אנחנו צריכים להעביר EventArgs.

תכלס זו מחלקה שלא מכילה כלום, אבל הקונבנציה היא לרשת ממנה באירועים, למרות שהיה אפשר גם להשתמש בכל object.

מה שיוצא זה שאנחנו יוצרים מלא מחלקות לכל אירוע שאנחנו רוצים להקפיץ.

בניגוד לEventHander, אין מחלקה דומה לEventArgs, אבל זה לא אומר שאנחנו לא יכולים ליצור כזאת בעצמנו:

1
2
3
4
5
6
7
8
public class ItemEventArgs<T> : EventArgs
{
public T Value
{
get;
set;
}
}

אפשר לעשות גם שהProperty הזה יהיה readonly (ראו גם טיפ מספר 14):

1
2
3
4
5
6
7
8
9
10
11
12
13
14
public class ItemEventArgs<T> : EventArgs
{
private readonly T mValue;
public ItemEventArgs(T value)
{
mValue = value;
}
public T Value
{
get { return mValue; }
}
}

ככה נוכל ליצור אירועים משלנו בצורה יותר נחמדה:

1
public event EventHandler<ItemEventArgs<Person>> EmployerAdded;

ולהקפיץ אותו (כרגע בלי בדיקה שהוא תקין):

1
EmployerAdded(this, new ItemEventArgs<Person>(person));

אפשר קצת להתבלבל מרוב משתנים גנריים.

לסיום, אפשר לעשות implicit cast כדי שלא יהיה צורך לעשות new מאולץ לEventArgs:

1
2
3
4
public static implicit operator ItemEventArgs<T>(T source)
{
return new ItemEventArgs<T>(source);
}

ואז להקפיץ בצורה טיפה יותר יפה

1
EmployerAdded(this, person);

סופ"ש עם אירועים מלאי פריטים טוב

שתף