שדות לעומת מאפיינים
חלק מהיחידה תכנות מונחה עצמים במסלול ה-C# של Coddy. שיעור 6 מתוך 70.
שדות הם משתנים שמוצהרים ישירות במחלקה. מאפיינים הם חברים שמספקים גישה מבוקרת לשדות באמצעות מאחזרי get ו-set.
שדות מאחסנים נתונים ישירות
public class Person
{
// שדות - אחסון ישיר של משתנים
private string name;
private int age;
}מאפיינים מספקים גישה מבוקרת באמצעות get ו-set
public class Person
{
private string name;
// מאפיין עם שדה גיבוי
public string Name
{
get { return name; }
set { name = value; }
}
}מאפיינים שממומשים אוטומטית (קיצור)
public class Person
{
// מאפיין שממומש אוטומטית
public string Name { get; set; }
public int Age { get; set; }
}מאפיינים יכולים לכלול לוגיקת אימות
public class Person
{
private int age;
public int Age
{
get { return age; }
set
{
if (value >= 0 && value <= 120)
age = value;
}
}
}מאפיין לקריאה בלבד (מאפשר גישה get בלבד)
public class Circle
{
private double radius;
public double Radius
{
get { return radius; }
}
// מאפיין מחושב לקריאה בלבד
public double Area
{
get { return Math.PI * radius * radius; }
}
}שדות הם בדרך כלל פרטיים, וניגשים אליהם באמצעות מאפיינים. מאפיינים מאפשרים להוסיף לוגיקה, אימות ושליטה באופן הגישה לנתונים או שינוי שלהם. מאפיינים הממומשים אוטומטית נוחים כשאין צורך בלוגיקה נוספת.
אתגר
בינוניצרו מחלקה BankAccount שמדגימה את ההבדל בין שדות למאפיינים:
- שדה פרטי
balanceלאחסון יתרת החשבון - מאפיין שממומש אוטומטית
AccountName - מאפיין לקריאה בלבד
Balanceשמחזיר את השדה של היתרה - המתודות
Depositו־Withdrawשמשנות את השדה הפרטי
נסו בעצמכם
using System;
class Program
{
static void Main()
{
string accountName = Console.ReadLine();
decimal initialBalance = decimal.Parse(Console.ReadLine());
decimal depositAmount = decimal.Parse(Console.ReadLine());
BankAccount account = new BankAccount(accountName, initialBalance);
Console.WriteLine($"Account: {account.AccountName}");
Console.WriteLine($"Initial Balance: ${account.Balance}");
account.Deposit(depositAmount);
Console.WriteLine($"After Deposit: ${account.Balance}");
string result = account.Withdraw(2000);
Console.WriteLine($"Withdraw attempt: {result}");
Console.WriteLine($"Final Balance: ${account.Balance}");
}
}השיעור הזה כולל חידון קצר. התחילו את השיעור כדי לענות עליו ולעקוב אחרי ההתקדמות.
כל השיעורים ביחידה תכנות מונחה עצמים
1יסודות התכנות מונחה העצמים
קבצים חיצונייםמרחבי שמות והנחיותמבוא למחלקות ולאובייקטיםמילת המפתח 'this'מתודות ופרמטריםשדות לעומת מאפייניםבנאיםאתחול אובייקטיםסיכום – מחשבון פשוט4ירושה
תחביר ירושה בסיסית (:)מילת המפתח 'base'מילות המפתח Virtual ו-Overrideמחלקות Sealedמחלקת הבסיס 'object'סיכום – היררכיית עובדים7תכונות מתקדמות
העמסת אופרטוריםאינדקסרים (this[])דריסת ToString()מתודות הרחבהסיכום – רשימה מותאמת אישית2מאפיינים וחברים סטטיים
מאפיינים במימוש אוטומטימאפיינים לקריאה בלבד ולכתיבה בלבדשדות ומתודות סטטייםמחלקות סטטיותחברים עם גוף ביטוי5פולימורפיזם וממשקים
פולימורפיזם בזמן קומפילציה לעומת בזמן ריצהממשק לעומת מחלקה מופשטתממשקים מרוביםממשקים מפורשיםהמרה כלפי מעלה והמרה כלפי מטהחזרה: מחשבון צורות8מושגים מתקדמים בתכנות מונחה עצמים
קומפוזיציה במקום ירושהGenerics (מחלקות ומתודות)נציגים ואירועיםמאפיינים ורפלקציהIDisposable והצהרת usingיסודות הזרקת תלויותתרגלו בעצמכם: קומפיילר C# אונליין