מאפיינים לקריאה בלבד ולכתיבה בלבד
חלק מהיחידה תכנות מונחה עצמים במסלול ה-C# של Coddy. שיעור 11 מתוך 70.
לפעמים צריך מאפיינים שניתן רק לקרוא או רק לכתוב. אפשר לשלוט בכך באמצעות private באקססורים נפרדים.
למאפיין לקריאה בלבד יש getter ציבורי אבל setter פרטי (או שאין לו setter כלל):
public class User
{
public string Username { get; private set; }
public User(string username)
{
Username = username;
}
}קוד חיצוני יכול לקרוא את Username, אבל רק המחלקה עצמה יכולה לשנות אותו. זה שימושי לערכים שיש להגדיר פעם אחת במהלך הבנייה.
למאפיין לכתיבה בלבד יש מגדיר ציבורי אך מאחזר פרטי:
public class Account
{
public string Password { private get; set; }
public bool ValidatePassword(string input)
{
return input == Password;
}
}מאפיינים לכתיבה בלבד הם נדירים אך שימושיים עבור נתונים רגישים כמו סיסמאות, כאשר רוצים לקבל קלט מבלי לחשוף את הערך השמור.
אפשר גם ליצור מאפיינים לקריאה בלבד באמצעות getter בלבד:
public class Circle
{
public double Radius { get; }
public double Area => Math.PI * Radius * Radius;
public Circle(double radius)
{
Radius = radius;
}
}לתכונות עם get; בלבד ניתן להציב ערך רק בבנאי או בזמן ההכרזה, ולכן הן אינן ניתנות לשינוי לאחר יצירת האובייקט.
אתגר
קלבואו נבנה מערכת תצורה מאובטחת שמדגימה מתי להשתמש במאפיינים לקריאה בלבד ולכתיבה בלבד כדי להגן על נתונים רגישים.
תיצרו שני קבצים כדי לארגן את הקוד שלכם:
Config.cs: הגדירו מחלקה בשםServerConfigבמרחב השמותSettings, שמנהלת את תצורת השרת. צריכים להיות בה:- מאפיין לקריאה בלבד
ServerName(אפשר להגדיר אותו רק בבנאי) - מאפיין לקריאה בלבד
Portעם מאפיין הגדרה פרטי (מוגדר באמצעות הבנאי) - מאפיין לכתיבה בלבד
ApiKeyששומר מפתח סודי באופן פנימי - מתודה
ValidateApiKey(string key)שמחזירהtrueאם המפתח שסופק תואם למפתח השמור - בנאי שמקבל את שם השרת ואת מספר הפורט
- מאפיין לקריאה בלבד
Program.cs: בקובץ הראשי שלכם, צרו אובייקטServerConfigבאמצעות ערכי קלט, הגדירו את מפתח ה-API ואז אמתו אותו מול מפתח בדיקה.
תקבלו ארבעה קלטים:
- שם השרת
- מספר הפורט
- מפתח ה-API לשמירה
- מפתח ה-API לאימות
הדפיסו את פרטי השרת ואת תוצאת האימות בפורמט הבא:
Server: {ServerName}, Port: {Port}
API Key Valid: {True/False}לדוגמה, אם הקלטים הם MainServer, 8080, secret123 ו-secret123, הפלט צריך להיות:
Server: MainServer, Port: 8080
API Key Valid: Trueנסו בעצמכם
using System;
using Settings;
class Program
{
public static void Main(string[] args)
{
// קראו את הקלטים
string serverName = Console.ReadLine();
int port = Convert.ToInt32(Console.ReadLine());
string apiKeyToStore = Console.ReadLine();
string apiKeyToValidate = Console.ReadLine();
// TODO: צרו אובייקט ServerConfig עם serverName ו-port
// TODO: הגדירו את מפתח ה-API באמצעות המאפיין לכתיבה בלבד
// TODO: אמתו את מפתח ה-API והדפיסו את התוצאות
// פורמט: Server: {ServerName}, Port: {Port}
// API Key Valid: {True/False}
}
}
השיעור הזה כולל חידון קצר. התחילו את השיעור כדי לענות עליו ולעקוב אחרי ההתקדמות.
כל השיעורים ביחידה תכנות מונחה עצמים
1יסודות התכנות מונחה העצמים
קבצים חיצונייםמרחבי שמות והנחיותמבוא למחלקות ולאובייקטיםמילת המפתח 'this'מתודות ופרמטריםשדות לעומת מאפייניםבנאיםאתחול אובייקטיםסיכום – מחשבון פשוט4ירושה
תחביר ירושה בסיסית (:)מילת המפתח 'base'מילות המפתח Virtual ו-Overrideמחלקות Sealedמחלקת הבסיס 'object'סיכום – היררכיית עובדים7תכונות מתקדמות
העמסת אופרטוריםאינדקסרים (this[])דריסת ToString()מתודות הרחבהסיכום – רשימה מותאמת אישית2מאפיינים וחברים סטטיים
מאפיינים במימוש אוטומטימאפיינים לקריאה בלבד ולכתיבה בלבדשדות ומתודות סטטייםמחלקות סטטיותחברים עם גוף ביטוי5פולימורפיזם וממשקים
פולימורפיזם בזמן קומפילציה לעומת בזמן ריצהממשק לעומת מחלקה מופשטתממשקים מרוביםממשקים מפורשיםהמרה כלפי מעלה והמרה כלפי מטהחזרה: מחשבון צורות8מושגים מתקדמים בתכנות מונחה עצמים
קומפוזיציה במקום ירושהGenerics (מחלקות ומתודות)נציגים ואירועיםמאפיינים ורפלקציהIDisposable והצהרת usingיסודות הזרקת תלויותתרגלו בעצמכם: קומפיילר C# אונליין