תכנות מונחה עצמים (OOP) - פולימורפיזם - המחלקה Object

סגור באמצעות טופס זה תוכלו לספר ולהמליץ לחבריכם..
שם השולח:
כתובת דוא"ל של השולח:
שם המקבל:
שלח לכתובת דוא"ל:
הוסף הערה:
המחלקה Object הנה המחלקה הבסיסית ביותר ב- .NET Framework כל הטיפוסים המוגדרים ב-C# , הן Value types והן Reference types, כמו גם כל הטיפוסים שנגדיר במהלך חיינו המקצועיים ב- C# ירשו את המחלקה Object בצורה מפורשת (Explicit) או מרומזת (Implicit). הורשה זו מבטיחה שכל אובייקט יציע לפחות קבוצה מינימלית של פעילויות שימושיות.
 
המחלקה Object


 
מאת: ארז קלר


דוגמת קוד​הורדת דוגמאות קוד 

 

המחלקה Object הנה המחלקה הבסיסית ביותר ב- .NET Framework
כל הטיפוסים המוגדרים ב-C# , הן Value types והן Reference types, כמו גם כל הטיפוסים שנגדיר במהלך חיינו המקצועיים ב- C# ירשו את המחלקה Object בצורה מפורשת (Explicit) או מרומזת (Implicit).
הורשה זו מבטיחה שכל אובייקט יציע לפחות קבוצה מינימלית של פעילויות שימושיות.
 

public virtual bool Equals(object)

שיטה זו כפי שהיא ממומשת ב- Object, בודקת האם שני הייחוסים מצביעים לאותו האובייקט.  נממש מחדש שיטה זו במחלקות הנגזרות על מנת לבצע בדיקה של תוכן האובייקטים.
מימוש שיטה זו מחייב מימוש של המתודה ()GetHashCode
 

public virtual int GetHashCode()

שיטה זו נממש על מנת שתחזיר Unique ID של אובייקט (Hash code).
שימושי ל- HashTables .
 

public Type GetType()

משמשת על מנת לזהות את הטיפוס בזמן ריצה (Reflections).
 

public virtual string ToString()  

שיטה זו כפי שהיא ממומשת ב- Object ,מחזירה את שם המחלקה , מקובל שמימוש מחדש יחזיר תיאור קצר של ערכי האובייקט.
ניתן לתאר באמצעות מתודה זו את ה- state בו נמצא האובייקט.
 
לדוגמה (ObjectSample):

המחלקה Person

 1  : class Person 
 2  : { 
 3  :     private int id; 
 4  :     private string firstName; 
 5  :     private string lastName; 
 6  :     private byte age; 
 7  :  
 8  :     public Person() 
 9  :     { 
 10 :     } 
 11 :     public Person(string first, string last, byte age, int id) 
 12 :     { 
 13 :         this.firstName = first; 
 14 :         this.lastName = last; 
 15 :         this.age = age; 
 16 :         this.id = id; 
 17 :     } 
 18 :     public void SetPerson(string first, string last, byte age, int id) 
 19 :     { 
 20 :         this.firstName = first; 
 21 :         this.lastName = last; 
 22 :         this.age = age; 
 23 :         this.id = id; 
 24 :     } 
 25 :     public void PrintPerson() 
 26 :     { 
 27 :         Console.WriteLine("Name:{0} {1}", lastName, firstName); 
 28 :         Console.WriteLine("ID : {0}", id); 
 29 :         Console.WriteLine("age : {0}", age); 
 30 :     } 
 31 :     public override bool Equals(Object obj) 
 32 :     { 
 33 :         if (obj is Person) 
 34 :         { 
 35 :             Person p; 
 36 :             p = (Person)obj; 
 37 :             if (this.firstName == p.firstName && this.lastName == p.lastName && this.age == p.age && this.id == p.id) 
 38 :                 return true; 
 39 :         } 
 40 :         return false; 
 41 :     } 
 42 :     public override int GetHashCode() 
 43 :     { 
 44 :         return this.id; 
 45 :     } 
 46 :     public override string ToString() 
 47 :     { 
 48 :         return lastName + "," + firstName + "," + age; 
 49 :     } 
 50 : } 
שורה 1 - class Person יורש את המחלקה object, אמנם זה לא כתוב סצורה מפורשת אבל זה מתבצע בצורה מרומזת.
אפשר היה לכתוב זאת גם בצורה מפורשת: class Person:Object אין שום הבדל.
בשורה 31 - המחלקה Person דורסת את המימוש של המתודה Equal המוגדרת במחלקת הבסיס ומספרת מימוש המתאים למחלקה המימוש משווה בין האובייקט this באמצעותו הופעלה המתודה לאובייקט הנשלח כפרמטר.
בשורה 42 - המחלקה דורסת את המתודה HetHashCode אשר מוגדרת ב- Object ומספקת מימוש משל עצמה, המתודה GetHashCode אמורה להחזיר ערך המזהה את האובייקט חד ערכית,  הערך ID של האובייקט מתאים במקרה זה.
בשורה 46 - המחלקה דורסת את ToString ומגדירה חמרוזת המתאימה לאובייקט מהמחלקה Person.



המתודה Main
 1  : class Program 
 2  : { 
 3  :     static void Main(string[] args) 
 4  :     { 
 5  :         Person p1 = new Person("Moshe", "Moshe", 12, 2345); 
 6  :         Person p2 = new Person("Nitza", "Nitza", 34, 678); 
 7  :         Person p3 = new Person("Nitza", "Nitza", 34, 678); 
 8  :  
 9  :         Console.WriteLine(p1.GetType()); 
 10 :         Console.WriteLine(p1.GetType().BaseType); 
 11 :  
 12 :         if (p1.Equals(p2)) 
 13 :             Console.WriteLine("Objects are equals"); 
 14 :         else 
 15 :             Console.WriteLine("Objects are not equals"); 
 16 :         if (p2.Equals(p3)) 
 17 :             Console.WriteLine("Objects are the equals"); 
 18 :         else 
 19 :             Console.WriteLine("Objects are not equals"); 
 20 :         Console.WriteLine(p1.ToString()); 
 21 :     } 
 22 : } 
תחילה נקצה 3 אובייקטים בשורות 5,6,7, שימו לב ש-p1 ו-p2 זהים מבחינת התוכן (אם כי מדובר על אובייקטים שונים עם ייחוסים שונים).
בשורה 9 נשתמש במתודה GetType שגם היא מוגדרת ב- Object אולם לא ניתנת לדריסה, המתודה מחזירה את שם האובייקט ואת מרחב השמות בו הוא מוגדר.
בשורה 10 -  המתודה GetType מחזירה אובייקט מהטיפוס Type (שייך למנגנון ה- Reflection), במחלקה Type נוגדר מאפיין בשם BaseType המחזיר את שם מחלקת הבסיס. בחלון הפלט ניתן להבחין שאכן Person יורשת את Object.
בשורה 12 - נבדוק האם p1 שווה ל-p2 באמצעות קריאה למתודה Equal, אין אנו בודקים את הייחוסים אלא את תוכן האובייקט.
התשובה כמובן תהיה שלילית.
בשורה 16 - נבדוק באמצעות Equal האם p2 זהה ל-p3 הפעם התשובה תהיה true.

 

פלט:
פלט התוכנית ObjectSample



 



כל הזכויות שמורות למחבר ©