303. Event subscription hack

[נכתב ע”י עמית יוגב]

רובנו מכירים את הבעיה כשאנחנו מנסים לעשות Raise לevent אבל אף אחד לא רשום אליו:

1
2
3
4
5
6
7
8
9
10
public class EventHack
{
public event Action<string> OnAdd;
public void Add(string numbers)
{
OnAdd(numbers);
//Calculation...
}
}

אם נקרא לOnAdd ואף אחד לא יהיה רשום אליו – נקבל שגיאת System.NullReferenceException 😞

כדי לפתור את הבעיה אנחנו קוראים לevent דרך מתודת ביניים שבודקת שמישהו רשום לevent:

1
2
3
4
5
6
7
public void RaiseOnAdd(string numbers)
{
if(OnAdd!=null)
{
OnAdd(numbers);
}
}

אבל זה מכוער ויוצר הרבה קוד מיותר

מה אפשר לעשות במקום?

נאתחל את הevent בצורה הבאה:

1
public event Action<string> OnAdd = delegate{};

מה שיצור רישום אוטומטי לפונקציה שלא עושה כלום. עכשיו אפשר לקרוא לevent ישירות מהפונקציה שלנו בלי לחשוש משגיאות מיותרות!

המשך יום נחמד 😃

שתף