
29-11-2006, 07:19
|
|
|
|
חבר מתאריך: 17.09.06
הודעות: 24
|
|
בוקר טוב, מקווה שאני לא מאחר.
אוברלואדינג אומר שאתה לוקח שתי פונקציות, קורא להן אותו דבר, ומשנה את הסוג שהן מחזירות ואת הפרמטרים שלהן. בוא נסתכל על הדוגמה Console.WriteLine. יש הרבה מאוד פונקציות שנקראות ככה, הנה שתיים:
public void Console.WriteLine()
public void Console.WriteLine(string Line(
(סורי על הסוגריים שעברו צד, אני שונא את היישור במערכת פורומים הזו)
לא זוכר את הניסוח המדוייק, אבל זה בערך ככה. מה אנחנו רואים? יש שתי פונקציות שקוראים להן בשם WriteLine, וכשאתה קורא לפונקציה בשם כזה, הקומפיילר מחליט לאיזו מהן אתה מצפה לפי הפרמטרים שאתה מעביר. במקרה שלנו - אם העברת סטרינג, הוא קורא לפונקציה מס' 2. אם לא העברת כלום - הוא קורא לפונצקיה מס' 1. הפרמטרים חייבים להיות שונים, השם חייב להיות זהה, הטיפוס המוחזר יכול להיות שונה.
האלה, האובלואדינג. זה בעצם לקחת פונקציה שירשת (כל אובייקט יורש משהו מהמחלקה object תמיד), ולדרוס אותה עם פונקציה שמבצעת את התפקיד יותר טוב. זה הולך ככה:
Class Original
{
public virtual void Bla() {...}
}
Class Decendent:Original
{
public override void Bla() {...}
}
זה בערך הכל. אם מטודה היא וירטואלית, אפשר לדרוס אותה. אם היא אבסטרקטית, חייבים לדרוס אותה. מקווה שעזרתי,
|