מחלקות גנריות - המשך
במאמר אחר דיברנו על Generic Collections, כעת נראה דבר נוסף שניתן לעשות עם Generics.
אני יכול להגדיר מחלקה, עם טיפוס גנרי, וככה בעת יצירת אובייקט מהמחלקה, נצטרך כבר להחליט מאיזה סוג יהיה האובייקט הגנרי שאיתו עובדת המחלקה
לדוגמה
class MyGen<T>
{
}
יכ זוהי יצירת מחלקה רגילה, אך ניתן לראות שבהגדרה שלה אנו מוסיפים פרמטר, אנו מודיעים שהמחלקה תעבוד עם אובייקט מסוג T שאיננו ידוע כרגע, אך בעת יצירת אובייקט מהמחלקה יצטרכו להגדיר אותו.
לדוגמה
MyGen<int>
m1 = new MyGen<int>();
כעת במחלקה עצמה אני יכול לעבוד עם האובייקט הגנרי שלי בלי לדעת מה הסוג שלו, בשבילי הוא מסוג T וזהו.
ניתן להגדיר בנאי שיקבל ערך עבורו ולשמור את הערך במחלקה:
private T myData;
public MyGen(T data)
{
this.myData = data;
}
ובקיצור לעשות בו שימוש רגיל...
זו גם הדרך שבה יצרו במיקרוסופט את Generic Collections, פשוט יוצרים מחלקה שיורשת מאיזה Collection, מגדירים לה שתקבל סוג גנרי, ואז ניתן להוסיף או למשוך ממנה את הסוג שהגדרתי
ניתן גם להגדיר למחלקה 2 סוגים של אובייקטים גנרים לדוגמא
class MyGen<T,K>
{}
עדיף, אך לא חובה, לדרוס במחלקה שאנו יוצרים את הפונקציות ToString שיש לכל אובייקט, כי אחרת נקבל פשוט את סוג המחלקה ולא משהו בעל משמעות, את הפונקציה GetHashCode שמחזירה ערך יחודי(בערך) לכל אובייקט וככה עוזרת להבדיל בין אובייקטים שונים בהשוואת או בהכנסה למערכים, ואת הפונקציה Equals שמשווה בין אובייקטים בעזרת ה HashCode. דוגמה לישום של הפונקציות האלה:
public override string ToString()
{
return myData.ToString();
}
public override int GetHashCode()
{
return myData.GetHashCode();
}
public override bool Equals(object obj)
{
if (obj
is T)
{
return
((T)obj).Equals(this);
}
else
return false;
}
להורדת הפרוייקט