מילת המפתח 'params'
חלק מהיחידה תכנות מונחה עצמים במסלול ה-C# של Coddy. שיעור 47 מתוך 70.
מילת המפתח params מאפשרת למתודה לקבל מספר משתנה של ארגומנטים מאותו סוג. במקום לדרוש מהקוראים ליצור מערך באופן ידני, הם יכולים להעביר ארגומנטים ישירות, כשהם מופרדים בפסיקים.
הצב את params לפני פרמטר מערך בחתימת המתודה:
public static int Sum(params int[] numbers)
{
int total = 0;
foreach (int n in numbers)
total += n;
return total;
}
// כל הקריאות האלה פועלות
Console.WriteLine(Sum(1, 2)); // 3
Console.WriteLine(Sum(1, 2, 3, 4, 5)); // 15
Console.WriteLine(Sum()); // 0 (מערך ריק)המהדר עוטף את הארגומנטים באופן אוטומטי במערך. אפשר גם להעביר מערך קיים ישירות, אם כבר יש לך כזה:
int[] values = { 10, 20, 30 };
Console.WriteLine(Sum(values)); // 60יש כמה כללים שכדאי לזכור: למתודה יכול להיות רק פרמטר params אחד, והוא חייב להיות הפרמטר האחרון ברשימה. אפשר לשלב אותו עם פרמטרים רגילים:
public static void Log(string prefix, params object[] items)
{
foreach (var item in items)
Console.WriteLine(prefix + item);
}
Log("Item: ", "Apple", 42, true);מילת המפתח params הופכת ממשקי API לגמישים יותר וידידותיים יותר למי שקורא להם, ולכן אפשר לראות אותה במתודות כמו Console.WriteLine ו-string.Format.
אתגר
קלבואו נבנה מעצב הודעות גמיש שמשתמש במילת המפתח params כדי לטפל בכל מספר של ערכים. תיצרו מחלקת שירות שיכולה לעצב הודעות עם ארגומנטים משתנים, ותראו כיצד params הופכת מתודות לרב-תכליתיות יותר ונוחות יותר למי שקורא להן.
תארגנו את הקוד שלכם בשני קבצים:
MessageFormatter.cs: צרו מחלקה בשםMessageFormatterבמרחב השמותFormatting, ובה שתי מתודות שמשתמשות ב-params:Combine(params string[] parts)- מחברת את כל המחרוזות שסופקו, עם רווח ביניהן, ומחזירה את התוצאהFormatList(string label, params int[] numbers)- משלבת פרמטר רגיל עם מערךparams. עליה להחזיר את התווית ואחריה נקודתיים, ואז את כל המספרים כשהם מופרדים בפסיקים (לדוגמה,Scores: 85, 90, 78)
Program.cs: בקובץ הראשי שלכם, הדגימו את שתי המתודות עם קלטים. קראו מחרוזת תווית, ואז קראו שורה של מספרים שלמים המופרדים בפסיקים. השתמשו ב-Combineכדי לחבר שלוש מילים קבועות, והשתמשו ב-FormatListכדי להציג את התווית עם המספרים.
תקבלו שני קלטים:
- מחרוזת תווית (לדוגמה,
Scores) - רשימה של מספרים שלמים המופרדים בפסיקים (לדוגמה,
85,90,78,92)
תחילה, קראו ל-Combine עם המילים "Hello", "params" ו-"world!" והדפיסו את התוצאה. לאחר מכן, נתחו את המספרים השלמים המופרדים בפסיקים למערך וקראו ל-FormatList עם התווית ועם מערך המספרים השלמים, והדפיסו גם את התוצאה הזאת.
לדוגמה, אם הקלטים הם Scores ו-85,90,78, הפלט צריך להיות:
Hello params world!
Scores: 85, 90, 78שימו לב ש-Combine מקבלת ישירות כל מספר של מחרוזות, ואילו FormatList מראה שאפשר לשלב פרמטרים רגילים עם params — פרמטר ה-params רק צריך להופיע אחרון. אפשר גם להעביר מערך קיים למתודה שמשתמשת ב-params, וזה בדיוק מה שתעשו עם המספרים השלמים שנותחו!
נסו בעצמכם
using System;
using Formatting;
class Program
{
public static void Main(string[] args)
{
// קראו את הקלטים
string label = Console.ReadLine();
string numbersInput = Console.ReadLine();
// TODO: השתמשו ב-MessageFormatter.Combine עם "Hello", "params" ו-"world!"
// והדפיסו את התוצאה
// TODO: פענחו את המספרים השלמים המופרדים בפסיקים למערך int
// רמז: פצלו את המחרוזת והמירו כל חלק ל-int
// TODO: השתמשו ב-MessageFormatter.FormatList עם label ועם מערך int
// והדפיסו את התוצאה
}
}
השיעור הזה כולל חידון קצר. התחילו את השיעור כדי לענות עליו ולעקוב אחרי ההתקדמות.
כל השיעורים ביחידה תכנות מונחה עצמים
1יסודות התכנות מונחה העצמים
קבצים חיצונייםמרחבי שמות והנחיותמבוא למחלקות ולאובייקטיםמילת המפתח 'this'מתודות ופרמטריםשדות לעומת מאפייניםבנאיםאתחול אובייקטיםסיכום – מחשבון פשוט4ירושה
תחביר ירושה בסיסית (:)מילת המפתח 'base'מילות המפתח Virtual ו-Overrideמחלקות Sealedמחלקת הבסיס 'object'סיכום – היררכיית עובדים7תכונות מתקדמות
העמסת אופרטוריםאינדקסרים (this[])דריסת ToString()מתודות הרחבהסיכום – רשימה מותאמת אישית2מאפיינים וחברים סטטיים
מאפיינים במימוש אוטומטימאפיינים לקריאה בלבד ולכתיבה בלבדשדות ומתודות סטטייםמחלקות סטטיותחברים עם גוף ביטוי5פולימורפיזם וממשקים
פולימורפיזם בזמן קומפילציה לעומת בזמן ריצהממשק לעומת מחלקה מופשטתממשקים מרוביםממשקים מפורשיםהמרה כלפי מעלה והמרה כלפי מטהחזרה: מחשבון צורות8מושגים מתקדמים בתכנות מונחה עצמים
קומפוזיציה במקום ירושהGenerics (מחלקות ומתודות)נציגים ואירועיםמאפיינים ורפלקציהIDisposable והצהרת usingיסודות הזרקת תלויותתרגלו בעצמכם: קומפיילר C# אונליין