פרמטרים אופציונליים
חלק מהיחידה תכנות מונחה עצמים במסלול ה-C# של Coddy. שיעור 48 מתוך 70.
פרמטרים אופציונליים מאפשרים לך להגדיר ערכי ברירת מחדל לפרמטרים של מתודה. כאשר מי שקורא למתודה לא מספק ערך עבור הפרמטר הזה, ערך ברירת המחדל משמש אוטומטית.
יוצרים פרמטר אופציונלי על ידי הקצאת ערך ברירת מחדל בחתימת המתודה:
public static void Greet(string name, string greeting = "Hello")
{
Console.WriteLine(greeting + ", " + name + "!");
}
// שתי הקריאות פועלות
Greet("Alice"); // Hello, Alice!
Greet("Bob", "Welcome"); // Welcome, Bob!פרמטרים אופציונליים חייבים להופיע אחרי כל הפרמטרים הנדרשים. אפשר להגדיר כמה פרמטרים אופציונליים, והקוראים לפונקציה יכולים להשמיט כל אחד מהם מהסוף:
public static void CreateUser(string name, int age = 0, bool isActive = true)
{
Console.WriteLine($"{name}, Age: {age}, Active: {isActive}");
}
CreateUser("Emma"); // Emma, גיל: 0, פעיל: True
CreateUser("James", 25); // James, גיל: 25, פעיל: True
CreateUser("Sarah", 30, false); // Sarah, גיל: 30, פעיל: Falseערכי ברירת מחדל חייבים להיות קבועים בזמן הידור — ערכים מילוליים, ערכי const או ביטויי default. אי אפשר להשתמש במשתנים או בקריאות למתודות כערכי ברירת מחדל. לכן פרמטרים אופציונליים מתאימים במיוחד להגדרות תצורה ולמתודות שבהן רוב הקוראים משתמשים בערכים נפוצים.
אתגר
קלבואו נבנה מערכת התראות שמשתמשת בפרמטרים אופציונליים כדי לאפשר עיצוב גמיש של הודעות. תיצרו מחלקת שירות שיכולה לשלוח התראות עם הגדרות הניתנות להתאמה אישית, כאשר רוב הקוראים לה ישתמשו בערכי ברירת מחדל הגיוניים.
תארגנו את הקוד בשני קבצים:
NotificationService.cs: צרו מחלקה בשםNotificationServiceבמרחב השמותNotifications, ובה מתודה שמדגימה שימוש בפרמטרים אופציונליים:SendNotification(string message, string priority = "Normal", bool addTimestamp = true)- המתודה צריכה להחזיר מחרוזת התראה מעוצבת. כאשרaddTimestampהוא true, הוסיפו את[TIMESTAMP]לפני ההודעה. הפורמט צריך להיות:[Priority] Messageאו[TIMESTAMP] [Priority] Message, בהתאם להגדרת חותמת הזמן.
Program.cs: בקובץ הראשי, הדגימו כיצד פועלים פרמטרים אופציונליים באמצעות קריאה ל-SendNotificationבשלוש דרכים שונות — שימוש בכל ערכי ברירת המחדל, שינוי פרמטר אחד ושינוי שני הפרמטרים האופציונליים.
תקבלו שלוש קלטים:
- ההודעה הראשונה (תשתמש בכל ערכי ברירת המחדל)
- ההודעה השנייה (תשתמש בעדיפות
"Urgent"ובחותמת הזמן שמוגדרת כברירת מחדל) - ההודעה השלישית (תשתמש בעדיפות
"Low"וללא חותמת זמן)
קראו ל-SendNotification שלוש פעמים והדפיסו כל תוצאה:
- הקריאה הראשונה: העבירו רק את ההודעה הראשונה (תשתמש בערכי ברירת המחדל: עדיפות
"Normal", חותמת זמן מופעלת) - הקריאה השנייה: העבירו את ההודעה השנייה עם עדיפות
"Urgent"(חותמת הזמן עדיין מוגדרת כברירת מחדל ל-true) - הקריאה השלישית: העבירו את ההודעה השלישית עם עדיפות
"Low"ואתfalseעבור חותמת הזמן
לדוגמה, אם הקלט הוא System started, Server overload ו-Cache cleared, הפלט צריך להיות:
[TIMESTAMP] [Normal] System started
[TIMESTAMP] [Urgent] Server overload
[Low] Cache clearedשימו לב כיצד אותה מתודה מטפלת בקלות בכל שלושת התרחישים — הקוראים לה מציינים רק את מה שהם רוצים לשנות מערכי ברירת המחדל!
נסו בעצמכם
using System;
using Notifications;
class Program
{
public static void Main(string[] args)
{
// קראו את שלוש ההודעות
string message1 = Console.ReadLine();
string message2 = Console.ReadLine();
string message3 = Console.ReadLine();
// צרו מופע של NotificationService
NotificationService service = new NotificationService();
// TODO: קראו ל-SendNotification שלוש פעמים והדפיסו כל תוצאה:
// 1. קריאה ראשונה: העבירו רק את message1 (נעשה שימוש בכל ערכי ברירת המחדל)
// 2. קריאה שנייה: העבירו את message2 עם עדיפות "Urgent" (ערך ברירת המחדל של timestamp הוא true)
// 3. קריאה שלישית: העבירו את message3 עם עדיפות "Low" ואת false עבור timestamp
}
}
השיעור הזה כולל חידון קצר. התחילו את השיעור כדי לענות עליו ולעקוב אחרי ההתקדמות.
כל השיעורים ביחידה תכנות מונחה עצמים
1יסודות התכנות מונחה העצמים
קבצים חיצונייםמרחבי שמות והנחיותמבוא למחלקות ולאובייקטיםמילת המפתח 'this'מתודות ופרמטריםשדות לעומת מאפייניםבנאיםאתחול אובייקטיםסיכום – מחשבון פשוט4ירושה
תחביר ירושה בסיסית (:)מילת המפתח 'base'מילות המפתח Virtual ו-Overrideמחלקות Sealedמחלקת הבסיס 'object'סיכום – היררכיית עובדים7תכונות מתקדמות
העמסת אופרטוריםאינדקסרים (this[])דריסת ToString()מתודות הרחבהסיכום – רשימה מותאמת אישית2מאפיינים וחברים סטטיים
מאפיינים במימוש אוטומטימאפיינים לקריאה בלבד ולכתיבה בלבדשדות ומתודות סטטייםמחלקות סטטיותחברים עם גוף ביטוי5פולימורפיזם וממשקים
פולימורפיזם בזמן קומפילציה לעומת בזמן ריצהממשק לעומת מחלקה מופשטתממשקים מרוביםממשקים מפורשיםהמרה כלפי מעלה והמרה כלפי מטהחזרה: מחשבון צורות8מושגים מתקדמים בתכנות מונחה עצמים
קומפוזיציה במקום ירושהGenerics (מחלקות ומתודות)נציגים ואירועיםמאפיינים ורפלקציהIDisposable והצהרת usingיסודות הזרקת תלויותתרגלו בעצמכם: קומפיילר C# אונליין