Menu
Coddy logo textTech

מאפיינים לקריאה בלבד ולכתיבה בלבד

חלק מהיחידה תכנות מונחה עצמים במסלול ה-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; בלבד ניתן להציב ערך רק בבנאי או בזמן ההכרזה, ולכן הן אינן ניתנות לשינוי לאחר יצירת האובייקט.

challenge icon

אתגר

קל

בואו נבנה מערכת תצורה מאובטחת שמדגימה מתי להשתמש במאפיינים לקריאה בלבד ולכתיבה בלבד כדי להגן על נתונים רגישים.

תיצרו שני קבצים כדי לארגן את הקוד שלכם:

  • 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}
    }
}
quiz iconבחנו את עצמכם

השיעור הזה כולל חידון קצר. התחילו את השיעור כדי לענות עליו ולעקוב אחרי ההתקדמות.

כל השיעורים ביחידה תכנות מונחה עצמים

תרגלו בעצמכם: קומפיילר C# אונליין