The Difference Between Equals and Static Equal
כשהראתי לסטודנטים שאני מלמד את
הפוסט של
ספיריטוס שמדבר על ההבדלים בין Equal ל - ==,
שאלו אותי - מה ההבדל בין ה - Equal שיורשים מ - object לבין ה - Equal הסטטי ?
במחשבה ראשונה עניתי - שלמעשה הקריאה - Equal(obj1, obj2 מפעילה את obj1.Equal(obj2.
וכמובן שהשאלה הבאה הייתה, אז מה ההבדל ביניהם,
והתשובה הייתה נפתח את ה - reflector ונראה.
אז הנה הקוד של Equal
public static bool Equals(object objA, object objB)
{
return ((objA == objB) ||
(((objA != null) && (objB != null)) && objA.Equals(objB)));
}
למעשה קודם בודקים את האופרטור == ורק במקרה שזה החזיר false בודקים האם שניהם שונים מ - null ומפעילים את ה - equal,
שזה אומר למעשה כמה הבדלים מעשיים.
במידה ו - obj1 יהיה null, ה - Equal הרגיל ירסק את האפליקצייה בעוד שהסטטי יחיזר false.
במידה שעשינו override ל == אנחנו יכולים לקבל תוצאות שונות עבור ה - equal הרגיל (שלא מפעיל את ה - ==) לבין הסטטי.
במידה שעשינו override ל - equal אחנו יכולים לקבל תוצאה שונה עבור שני ה - equal