Menu
Coddy logo textTech
flag Ar iconالعربيةdown icon

خصائص القراءة فقط والكتابة فقط

جزء من قسم البرمجة كائنية التوجه في رحلة C# على Coddy. الدرس 11 من 70.

أحيانًا تحتاج إلى خصائص لا يمكن read منها إلا أو لا يمكن الكتابة إليها إلا. يمكنك التحكم في ذلك باستخدام private مع أدوات الوصول الفردية.

تحتوي property للقراءة فقط على getter عام ولكن setter خاص (أو لا تحتوي على setter على الإطلاق):

public class User
{
    public string Username { get; private set; }
    
    public User(string username)
    {
        Username = username;
    }
}

يمكن للتعليمات البرمجية الخارجية قراءة Username، ولكن لا يمكن تعديلها إلا من قِبل الفئة نفسها. وهذا مفيد للقيم التي ينبغي تعيينها مرة واحدة أثناء عملية الإنشاء.

تحتوي property للكتابة فقط على setter عام ولكن على getter خاص:

public class Account
{
    public string Password { private get; set; }
    
    public bool ValidatePassword(string input)
    {
        return input == Password;
    }
}

الخصائص write-only نادرة لكنها مفيدة للبيانات الحساسة مثل كلمات المرور، حيث تريد قبول input دون كشف القيمة stored.

يمكنك أيضًا إنشاء خصائص للقراءة فقط فعلًا باستخدام getter فقط:

public class Circle
{
    public double Radius { get; }
    public double Area => Math.PI * Radius * Radius;
    
    public Circle(double radius)
    {
        Radius = radius;
    }
}

الخصائص التي تحتوي على only get; لا يمكن إسنادها إلا في constructor أو عند التصريح بها، مما يجعلها غير قابلة للتغيير بعد إنشاء object.

challenge icon

التحدي

سهل

لنَبْنِ نظام إعدادات آمنًا يوضّح متى تستخدم الخصائص للقراءة فقط والخصائص للكتابة فقط لحماية البيانات الحساسة.

ستنشئ ملفين لتنظيم التعليمات البرمجية:

  • Config.cs: عرّف فئة ServerConfig في مساحة الأسماء Settings التي تدير إعدادات الخادم. ينبغي أن تحتوي على:
    • خاصية للقراءة فقط ServerName (لا يمكن تعيينها إلا في المُنشئ)
    • خاصية للقراءة فقط Port مع setter خاص (تُعيَّن عبر المُنشئ)
    • خاصية للكتابة فقط 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# عبر الإنترنت