חברים עם גוף ביטוי
חלק מהיחידה תכנות מונחה עצמים במסלול ה-C# של Coddy. שיעור 14 מתוך 70.
חברים בעלי גוף ביטוי מספקים תחביר תמציתי לחברים שמכילים ביטוי יחיד בלבד. במקום לכתוב גופים מלאים של מתודות או מאפיינים עם סוגריים מסולסלים, משתמשים בתחביר החץ =>.
עבור מתודות שמחזירות ביטוי יחיד, אפשר להחליף את כל גוף המתודה:
// מתודה מסורתית
public int Add(int a, int b)
{
return a + b;
}
// מתודה עם גוף ביטוי
public int Add(int a, int b) => a + b;התחביר הזה עובד גם עבור מאפיינים לקריאה בלבד, כפי שכבר ראית בקצרה:
public class Circle
{
public double Radius { get; set; }
public double Area => Math.PI * Radius * Radius;
public double Circumference => 2 * Math.PI * Radius;
}אפשר גם להשתמש בגופי ביטוי בנפרד עבור מאחזרי ומגדירי מאפיינים:
private string name;
public string Name
{
get => name;
set => name = value.Trim();
}גם בנאים יכולים להשתמש בתחביר הזה כשהם מכילים פקודה אחת:
public class Person
{
public string Name { get; }
public Person(string name) => Name = name;
}חברים עם גוף ביטוי הופכים את הקוד שלך לקריא יותר כשהלוגיקה פשוטה. השתמש בהם לפעולות פשוטות, אך היצמד לגופים מסורתיים כשנדרשות לך כמה פקודות או לוגיקה מורכבת.
אתגר
קלבואו נבנה מחשבון לתמחור מוצרים שמדגים את העוצמה של איברים בעלי גוף ביטוי, המאפשרים לכתוב קוד נקי ותמציתי.
תיצרו שני קבצים כדי לארגן את הקוד:
Product.cs: הגדירו מחלקתProductבמרחב השמותStore. המחלקה צריכה להדגים מגוון איברים בעלי גוף ביטוי:- מאפיין במימוש אוטומטי
Name(מחרוזת) ו-BasePrice(מספר עשרוני) - בנאי בעל גוף ביטוי שמגדיר את שני המאפיינים
- מאפיין לקריאה בלבד בעל גוף ביטוי
TaxAmountשמחשב 10% ממחיר הבסיס - מאפיין לקריאה בלבד בעל גוף ביטוי
TotalPriceשמחזיר את מחיר הבסיס בתוספת סכום המס - מתודה בעלת גוף ביטוי
GetDiscount(decimal percentage)שמחזירה את סכום ההנחה (מחיר הבסיס כפול האחוז חלקי 100) - מתודה בעלת גוף ביטוי
GetFinalPrice(decimal discountPercentage)שמחזירה את המחיר הכולל פחות ההנחה
- מאפיין במימוש אוטומטי
Program.cs: בקובץ הראשי, צרוProductבאמצעות ערכי הקלט, ואז הציגו את פירוט התמחור שלו.
תקבלו שלושה קלטים:
- שם המוצר
- מחיר בסיס
- אחוז ההנחה שיש להחיל
הדפיסו את פרטי התמחור בפורמט הבא:
Product: {Name}
Base Price: {BasePrice}
Tax (10%): {TaxAmount}
Total Price: {TotalPrice}
Discount ({percentage}%): {discountAmount}
Final Price: {finalPrice}לדוגמה, אם הקלטים הם Laptop, 1000 ו-15, הפלט צריך להיות:
Product: Laptop
Base Price: 1000.00
Tax (10%): 100.00
Total Price: 1100.00
Discount (15%): 150.00
Final Price: 950.00עצבו כל ערך כספי בדיוק עם שתי ספרות אחרי הנקודה העשרונית, לדוגמה value.ToString("F2") או $"{value:F2}". הדבר חל באותה מידה על מחיר הבסיס, המס, הסכום הכולל, ההנחה והמחיר הסופי.
זכרו להשתמש בתחביר החץ => עבור כל האיברים שמכילים ביטוי יחיד. כך הקוד שלכם יישאר נקי וקריא!
נסו בעצמכם
using System;
using Store;
class Program
{
public static void Main(string[] args)
{
// קרא את הקלטים
string name = Console.ReadLine();
decimal basePrice = Convert.ToDecimal(Console.ReadLine());
decimal discountPercentage = Convert.ToDecimal(Console.ReadLine());
// צור אובייקט Product באמצעות ערכי הקלט
Product product = new Product(name, basePrice);
// חשב את סכום ההנחה באמצעות המתודה GetDiscount
decimal discountAmount = product.GetDiscount(discountPercentage);
// חשב את המחיר הסופי באמצעות המתודה GetFinalPrice
decimal finalPrice = product.GetFinalPrice(discountPercentage);
// הדפס את פרטי המחירים בפורמט הנדרש:
Console.WriteLine($"Product: {product.Name}");
Console.WriteLine($"Base Price: {product.BasePrice:F2}");
Console.WriteLine($"Tax (10%): {product.TaxAmount:F2}");
Console.WriteLine($"Total Price: {product.TotalPrice:F2}");
Console.WriteLine($"Discount ({discountPercentage}%): {discountAmount:F2}");
Console.WriteLine($"Final Price: {finalPrice:F2}");
}
}השיעור הזה כולל חידון קצר. התחילו את השיעור כדי לענות עליו ולעקוב אחרי ההתקדמות.
כל השיעורים ביחידה תכנות מונחה עצמים
1יסודות התכנות מונחה העצמים
קבצים חיצונייםמרחבי שמות והנחיותמבוא למחלקות ולאובייקטיםמילת המפתח 'this'מתודות ופרמטריםשדות לעומת מאפייניםבנאיםאתחול אובייקטיםסיכום – מחשבון פשוט4ירושה
תחביר ירושה בסיסית (:)מילת המפתח 'base'מילות המפתח Virtual ו-Overrideמחלקות Sealedמחלקת הבסיס 'object'סיכום – היררכיית עובדים7תכונות מתקדמות
העמסת אופרטוריםאינדקסרים (this[])דריסת ToString()מתודות הרחבהסיכום – רשימה מותאמת אישית2מאפיינים וחברים סטטיים
מאפיינים במימוש אוטומטימאפיינים לקריאה בלבד ולכתיבה בלבדשדות ומתודות סטטייםמחלקות סטטיותחברים עם גוף ביטוי5פולימורפיזם וממשקים
פולימורפיזם בזמן קומפילציה לעומת בזמן ריצהממשק לעומת מחלקה מופשטתממשקים מרוביםממשקים מפורשיםהמרה כלפי מעלה והמרה כלפי מטהחזרה: מחשבון צורות8מושגים מתקדמים בתכנות מונחה עצמים
קומפוזיציה במקום ירושהGenerics (מחלקות ומתודות)נציגים ואירועיםמאפיינים ורפלקציהIDisposable והצהרת usingיסודות הזרקת תלויותתרגלו בעצמכם: קומפיילר C# אונליין