خصائص القراءة فقط والكتابة فقط
جزء من قسم البرمجة كائنية التوجه في رحلة 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.
التحدي
سهللنَبْنِ نظام إعدادات آمنًا يوضّح متى تستخدم الخصائص للقراءة فقط والخصائص للكتابة فقط لحماية البيانات الحساسة.
ستنشئ ملفين لتنظيم التعليمات البرمجية:
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}
}
}
يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.
جميع دروس البرمجة كائنية التوجه
1أساسيات OOP
الملفات الخارجيةNamespaces والتوجيهاتمقدمة في Classes و Objectsالكلمة المفتاحية 'this'Methods والمعاملاتFields مقابل PropertiesConstructorsObject Initializersمراجعة - آلة حاسبة بسيطة4الوراثة
صيغة الوراثة الأساسية (:)الكلمة المفتاحية 'base'الكلمات المفتاحية Virtual و Overrideالأصناف المختومة (Sealed Classes)الفئة الأساسية 'object'مراجعة - هيكلية الموظفين7ميزات متقدمة
تحميل العوامل (Operator Overloading)المفهرسات (Indexers (this[]))إعادة تعريف ()ToStringدوال التوسعة (Extension Methods)ملخص - Custom List2الخصائص والأعضاء الساكنة (Static Members)
الخصائص المطبقة تلقائيًا (Auto-Implemented Properties)خصائص القراءة فقط والكتابة فقطالحقول والدوال الساكنة (Static)الفئات الساكنة (Static Classes)الأعضاء ذات البنية التعبيرية (Expression-Bodied Members)5تعدد الأشكال والواجهات (Polymorphism & Interfaces)
تعدد الأشكال: وقت التجميع مقابل وقت التشغيلالواجهة مقابل الفئة المجردة (Abstract Class)الواجهات المتعددةالواجهات الصريحةUpcasting و Downcastingملخص - حاسبة الأشكال8مفاهيم البرمجة كائنية التوجه (OOP) المتقدمة
التركيب بدلاً من الوراثةالـ Generics (الأصناف والدوال)الـ Delegates والأحداثالـ Attributes والـ Reflectionواجهة IDisposable وجملة usingأساسيات Dependency Injectionتدرّب بنفسك: مترجم C# عبر الإنترنت