78. object Equals

ראינו בפעם הקודמת מהו Equals ואיך מממשים אותו.

לצערנו, קריאה לEquals היא “פחות כיפית” מקריאה לאופרטור הסטטי ==.

אחד הדברים המעצבנים הוא שכאשר אנחנו קוראים לEquals, מאחר ומדובר במתודה של הinstance, היא שאנחנו צריכים לבדוק מה קורה אם הinstance הוא null.

זה מקשה על הקריאה. נוכל לכתוב מתודה כזאת במקום לעשות בדיקות מעיקות:

1
2
3
4
5
6
7
8
9
10
11
public static bool AreEqual(object first, object second)
{
if (first == null)
{
return (second == null);
}
else
{
return (first.Equals(second));
}
}

ואז בכל פעם שאנחנו רוצים להשוות את שני האובייקטים עם Equals, פשוט נשלח לAreEqual את שניהם.

(שימו לב שמאחר ומדובר בreferenceים מסוג object, ההשוואה עם null היא השוואה של referenceים)

מסתבר שחשבו עלינו, ולא נצטרך לכתוב מתודה כזאת בכל מחלקה, אלא במחלקה object יש מתודה סטטית בשם Equals שהמימוש שלה הוא כנ"ל.

כלומר נוכל לכתוב תמיד

1
2
3
4
if (Equals(first, second))
{
// ...
}

במקום כך:

1
2
3
4
5
// What if first is null???
if (first.Equals(second))
{
// ...
}

יום שווה טוב

שתף