שדות גיבוי
חלק מהיחידה תכנות מונחה עצמים במסלול ה-C# של Coddy. שיעור 17 מתוך 70.
מאפיינים במימוש אוטומטי הם נוחים, אבל לפעמים דרושה לך שליטה רבה יותר באופן שבו מאפיין שומר או מאחזר את הערך שלו. כאן נכנסים לתמונה שדות גיבוי. שדה גיבוי הוא שדה פרטי ששומר את הנתונים בפועל עבור מאפיין.
public class Product
{
private decimal _price; // שדה גיבוי
public decimal Price
{
get { return _price; }
set { _price = value; }
}
}זה נראה כמו עבודה נוספת בהשוואה למאפיינים אוטומטיים, אבל שדות גיבוי מאפשרים לך להוסיף לוגיקה. לדוגמה, אפשר לאמת נתונים לפני ששומרים אותם:
public class Product
{
private decimal _price;
public decimal Price
{
get => _price;
set => _price = value < 0 ? 0 : value;
}
}כעת מחירים שליליים הופכים אוטומטית לאפס. אפשר גם לבצע טרנספורמציה לנתונים בעת קריאה או כתיבה, לתעד שינויים או להפעיל פעולות אחרות.
מוסכמת השמות של שדה הגיבוי משתמשת בדרך כלל בקידומת קו תחתון (_price) או באותיות קטנות (price) כדי להבדיל אותו מהמאפיין.
כשמשתמשים במאפיינים שמיושמים אוטומטית כמו public decimal Price { get; set; }, המהדר למעשה יוצר עבורך שדה גיבוי מוסתר. שדות גיבוי מפורשים מעניקים לך את אותו אחסון, לצד שליטה מלאה בהתנהגות.
אתגר
קלבואו נבנה מערכת חיישן טמפרטורה שמשתמשת בשדות גיבוי כדי לאמת ולהמיר נתונים בזמן שהם נשמרים ונשלפים.
תיצרו שני קבצים כדי לארגן את הקוד:
TemperatureSensor.cs: הגדירו מחלקה בשםTemperatureSensorבמרחב השמותSensors. החיישן הזה מודד טמפרטורה במעלות צלזיוס, אבל עלינו לוודא שהקריאות נשארות בטווח התקין. השתמשו בשדות גיבוי כדי לממש את הדברים הבאים:- מאפיין
Location(מחרוזת) עם שדה גיבוי_location. בעת הגדרת המיקום, אם הערך הוא null או ריק, שמרו במקום זאת את"Unknown". - מאפיין
Temperature(double) עם שדה גיבוי_temperature. בעת הגדרת הטמפרטורה, תחמו את הערך לטווח שבין-50ל-150(אם הוא נמוך מ-50-, שמרו 50-; אם הוא גבוה מ-150, שמרו 150). - מאפיין לקריאה בלבד בשם
TemperatureFahrenheit, שמחשב ומחזיר את הטמפרטורה בפרנהייט באמצעות הנוסחה:(celsius * 9 / 5) + 32. עליו להשתמש ישירות בשדה הגיבוי. - בנאי שמקבל ערכים של מיקום וטמפרטורה התחלתית.
- מאפיין
Program.cs: בקובץ הראשי שלכם, צרו חיישן באמצעות ערכי הקלט והציגו את הקריאות שלו. לאחר מכן עדכנו את הטמפרטורה באמצעות ערך קלט שני והציגו את הקריאות המעודכנות.
תקבלו שלושה ערכי קלט:
- מיקום החיישן
- קריאת הטמפרטורה ההתחלתית
- קריאת הטמפרטורה המעודכנת
הדפיסו את הפלט בפורמט הזה:
Sensor: {Location}
Temperature: {Temperature}C ({TemperatureFahrenheit}F)
Updated Temperature: {Temperature}C ({TemperatureFahrenheit}F)לדוגמה, אם ערכי הקלט הם Lab Room, 25 ו-200, הפלט אמור להיות:
Sensor: Lab Room
Temperature: 25C (77F)
Updated Temperature: 150C (302F)שימו לב שקריאת הטמפרטורה השנייה, 200, נתחמת ל-150 מכיוון שהיא חורגת מהטמפרטורה המרבית התקינה. שדות הגיבוי מאפשרים לכם לשלוט באופן שבו הנתונים נשמרים!
נסו בעצמכם
using System;
using Sensors;
class Program
{
public static void Main(string[] args)
{
// קרא את הקלטים
string location = Console.ReadLine();
double initialTemp = Convert.ToDouble(Console.ReadLine());
double updatedTemp = Convert.ToDouble(Console.ReadLine());
// TODO: צור TemperatureSensor עם המיקום והטמפרטורה ההתחלתית
// TODO: הדפס את מיקום החיישן ואת קריאות הטמפרטורה ההתחלתיות
// פורמט: "Sensor: {Location}"
// פורמט: "Temperature: {Temperature}C ({TemperatureFahrenheit}F)"
// TODO: עדכן את טמפרטורת החיישן לערך המעודכן
// TODO: הדפס את קריאות הטמפרטורה המעודכנות
// פורמט: "Updated Temperature: {Temperature}C ({TemperatureFahrenheit}F)"
}
}
השיעור הזה כולל חידון קצר. התחילו את השיעור כדי לענות עליו ולעקוב אחרי ההתקדמות.
כל השיעורים ביחידה תכנות מונחה עצמים
1יסודות התכנות מונחה העצמים
קבצים חיצונייםמרחבי שמות והנחיותמבוא למחלקות ולאובייקטיםמילת המפתח 'this'מתודות ופרמטריםשדות לעומת מאפייניםבנאיםאתחול אובייקטיםסיכום – מחשבון פשוט4ירושה
תחביר ירושה בסיסית (:)מילת המפתח 'base'מילות המפתח Virtual ו-Overrideמחלקות Sealedמחלקת הבסיס 'object'סיכום – היררכיית עובדים7תכונות מתקדמות
העמסת אופרטוריםאינדקסרים (this[])דריסת ToString()מתודות הרחבהסיכום – רשימה מותאמת אישית2מאפיינים וחברים סטטיים
מאפיינים במימוש אוטומטימאפיינים לקריאה בלבד ולכתיבה בלבדשדות ומתודות סטטייםמחלקות סטטיותחברים עם גוף ביטוי5פולימורפיזם וממשקים
פולימורפיזם בזמן קומפילציה לעומת בזמן ריצהממשק לעומת מחלקה מופשטתממשקים מרוביםממשקים מפורשיםהמרה כלפי מעלה והמרה כלפי מטהחזרה: מחשבון צורות8מושגים מתקדמים בתכנות מונחה עצמים
קומפוזיציה במקום ירושהGenerics (מחלקות ומתודות)נציגים ואירועיםמאפיינים ורפלקציהIDisposable והצהרת usingיסודות הזרקת תלויות3ארכיטקטורת מחלקות
נתוני מופע לעומת נתונים סטטייםמילות המפתח 'readonly' ו-'const'שדות גיבויסיכום – מנהל חשבונות בנקתרגלו בעצמכם: קומפיילר C# אונליין