الخصائص المطبقة تلقائيًا (Auto-Implemented Properties)
جزء من قسم Object Oriented Programming في رحلة C# على Coddy — الدرس 10 من 70.
تسمح لك الخصائص المنفذة تلقائياً (Auto-implemented properties) بالتصريح عن الخصائص دون كتابة حقول دعم صريحة. يقوم المترجم بإنشاء حقل خاص مخفي تلقائياً خلف الكواليس.
بدلاً من كتابة هذا الكود المطول:
public class Product
{
private string name;
public string Name
{
get { return name; }
set { name = value; }
}
}يمكنك ببساطة كتابة:
public class Product
{
public string Name { get; set; }
public decimal Price { get; set; }
public int Quantity { get; set; }
}يمكنك أيضاً تعيين قيم افتراضية مباشرة في التصريح:
public class Product
{
public string Name { get; set; } = "Unnamed";
public decimal Price { get; set; } = 0.0m;
public bool IsAvailable { get; set; } = true;
}تعد الخصائص المنفذة تلقائيًا (Auto-implemented properties) مثالية عندما لا تحتاج إلى التحقق من الصحة أو منطق مخصص في الـ getter أو الـ setter. فهي تحافظ على نظافة الفئات (classes) الخاصة بك وتقلل من الكود المتكرر (boilerplate code) بشكل كبير.
التحدي
سهللنقم ببناء نظام مخزون بسيط باستخدام الخصائص المنفذة تلقائيًا (auto-implemented properties) لتتبع العناصر في المتجر.
ستقوم بإنشاء ملفين لتنظيم الكود الخاص بك:
Item.cs: قم بتعريف فئةItemداخل مساحة الأسماءInventoryمع خصائص منفذة تلقائيًا لـName(string)، وPrice(decimal)، وInStock(bool). قم بتعيين القيم الافتراضية: يجب أن تكون القيمة الافتراضية لـNameهي"Unknown"، ولـPriceهي0.0m، ولـInStockهيtrue.Program.cs: في ملفك الرئيسي، قم بإنشاء كائنين من نوعItemباستخدام ممهدات الكائنات (object initializers). اقرأ الاسم والسعر لكل عنصر من المدخلات، ثم اطبع تفاصيل كل عنصر.
ستتلقى أربعة مدخلات:
- اسم العنصر الأول
- سعر العنصر الأول
- اسم العنصر الثاني
- سعر العنصر الثاني
اطبع كل عنصر بهذا التنسيق:
Item: {Name}, Price: {Price}, In Stock: {InStock}على سبيل المثال، إذا كانت المدخلات هي Laptop، و 999.99، و Mouse، و 25.50، يجب أن يكون المخرج:
Item: Laptop, Price: 999.99, In Stock: True
Item: Mouse, Price: 25.50, In Stock: Trueورقة مرجعية
تسمح لك الخصائص المنفذة تلقائيًا (Auto-implemented properties) بالتصريح عن الخصائص دون كتابة حقول دعم (backing fields) صريحة. يقوم المترجم (compiler) تلقائيًا بإنشاء حقل خاص مخفي.
الصيغة الأساسية:
public class Product
{
public string Name { get; set; }
public decimal Price { get; set; }
public int Quantity { get; set; }
}تعيين القيم الافتراضية:
public class Product
{
public string Name { get; set; } = "Unnamed";
public decimal Price { get; set; } = 0.0m;
public bool IsAvailable { get; set; } = true;
}تُعد الخصائص المنفذة تلقائيًا مثالية عندما لا تحتاج إلى التحقق من الصحة أو منطق مخصص في الـ getter أو الـ setter.
جرّب بنفسك
using System;
using Inventory;
class Program
{
public static void Main(string[] args)
{
// قراءة المدخلات للعنصر الأول
string name1 = Console.ReadLine();
decimal price1 = Convert.ToDecimal(Console.ReadLine());
// قراءة المدخلات للعنصر الثاني
string name2 = Console.ReadLine();
decimal price2 = Convert.ToDecimal(Console.ReadLine());
// TODO: إنشاء كائنين من النوع Item باستخدام object initializers
// تعيين خصائص Name و Price من قيم المدخلات
// TODO: طباعة تفاصيل كل عنصر بالتنسيق التالي:
// Item: {Name}, Price: {Price}, In Stock: {InStock}
}
}
يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.
جميع دروس Object Oriented Programming
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