0Pricing
C# Academy · درس

الخصائص المُطبَّقة تلقائيًا

صرّحوا عن الخصائص باستخدام صيغة تلقائية موجزة

الخصائص المُطبَّقة تلقائيًا درس مجاني في C# Academy على CoddyKit. هذا هو الدرس 1 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في C# Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة C# Academy 4 دروس في المجموع.

ما الخاصية؟

تبدو الخاصية كحقل من الخارج، لكنها تعتمد على دوال وصول (get وset). تتيح لك الخصائص عرض البيانات مع الاحتفاظ بالتحكم في طريقة قراءتها وكتابتها.

using System;

class Program
{
    public string Name { get; set; }

    static void Main()
    {
        var p = new Program();
        p.Name = "Coddy";
        Console.WriteLine(p.Name);
    }
}

صياغة التنفيذ التلقائي

تستخدم الخاصية المنفذة تلقائيًا الصياغة { get; set; }. ينشئ المترجم حقل إسناد مخفيًا نيابةً عنك، لذلك لا تحتاج إلى كتابته يدويًا.

using System;

class Person
{
    public string FirstName { get; set; }
    public int Age { get; set; }
}

class Program
{
    static void Main()
    {
        var person = new Person { FirstName = "Ada", Age = 36 };
        Console.WriteLine(person.FirstName + " is " + person.Age);
    }
}

لماذا نستخدم الخصائص بدلًا من الحقول؟

تمنحك الخصائص العامة واجهة API مستقرة. يمكنك لاحقًا إضافة التحقق من الصحة أو تغيير طريقة التخزين من دون كسر التعليمات البرمجية المستدعية. أما الحقول العامة فلا تتيح ذلك.

using System;

class Account
{
    public decimal Balance { get; set; }
}

class Program
{
    static void Main()
    {
        var a = new Account();
        a.Balance = 100.50m;
        Console.WriteLine("Balance: " + a.Balance);
    }
}

الخصائص التلقائية للقراءة فقط

احذف set لجعل الخاصية للقراءة فقط. ويمكن إسنادها في المُنشئ أو من خلال مُهيّئ فقط، ما يمنحك قيمًا غير قابلة للتغيير افتراضيًا.

using System;

class Circle
{
    public double Radius { get; }

    public Circle(double radius)
    {
        Radius = radius;
    }
}

class Program
{
    static void Main()
    {
        var c = new Circle(5.0);
        Console.WriteLine("Radius: " + c.Radius);
    }
}

القيم الافتراضية للخصائص

يمكنك منح الخاصية التلقائية قيمة أولية باستخدام = value;. يُنفّذ ذلك عند إنشاء الكائن، قبل تنفيذ جسم أي مُنشئ.

using System;

class Settings
{
    public bool DarkMode { get; set; } = true;
    public int Volume { get; set; } = 50;
}

class Program
{
    static void Main()
    {
        var s = new Settings();
        Console.WriteLine("DarkMode: " + s.DarkMode + ", Volume: " + s.Volume);
    }
}

دوال الإسناد الخاصة

تسمح private set للفئة بتغيير القيمة داخليًا، مع منع التعليمات البرمجية الخارجية من تعديلها. وهذا نمط شائع من أنماط التغليف.

using System;

class Counter
{
    public int Count { get; private set; }

    public void Increment()
    {
        Count++;
    }
}

class Program
{
    static void Main()
    {
        var counter = new Counter();
        counter.Increment();
        counter.Increment();
        Console.WriteLine("Count: " + counter.Count);
    }
}

دوال الإسناد التي تُنفّذ مرة واحدة

يسمح موصّل الوصول init بالإسناد أثناء تهيئة الكائن فقط. وبعد اكتمال الإنشاء تُقفَل القيمة.

using System;

class Product
{
    public string Name { get; init; }
    public decimal Price { get; init; }
}

class Program
{
    static void Main()
    {
        var p = new Product { Name = "Book", Price = 12.99m };
        Console.WriteLine(p.Name + ": " + p.Price);
    }
}

الخصائص بمستويات وصول مختلفة

تتبع الخصائص معدّلات الوصول المعتادة. ويمكنك دمج مستويات مختلفة، مثل مُوصل وصول عام مع دالة إسناد خاصة، أو خاصية داخلية بالكامل.

using System;

class User
{
    public string Id { get; private set; }

    public User(string id)
    {
        Id = id;
    }
}

class Program
{
    static void Main()
    {
        var u = new User("u-001");
        Console.WriteLine("User Id: " + u.Id);
    }
}

الخصائص التلقائية الشبيهة بالمحسوبة

تخزّن الخصائص التلقائية البيانات، ولا تُجري عمليات حسابية. إذا احتجت إلى قيمة محسوبة، فاستخدم خاصية كاملة، وسنتناولها لاحقًا. في الوقت الحالي، تعامل مع الخصائص التلقائية على أنها وسيلة تخزين بسيطة.

using System;

class Rectangle
{
    public double Width { get; set; }
    public double Height { get; set; }
}

class Program
{
    static void Main()
    {
        var r = new Rectangle { Width = 4, Height = 3 };
        double area = r.Width * r.Height;
        Console.WriteLine("Area: " + area);
    }
}

تحديث الخصائص التلقائية

يمكنك قراءة خاصية تلقائية قابلة للإسناد وإعادة إسنادها كلما شئت، تمامًا كما تفعل مع متغير.

using System;

class Player
{
    public int Score { get; set; }
}

class Program
{
    static void Main()
    {
        var player = new Player();
        player.Score = 10;
        player.Score += 5;
        player.Score *= 2;
        Console.WriteLine("Score: " + player.Score);
    }
}

جمع العناصر معًا

تتكون فئة النموذج المعتادة في الغالب من خصائص تلقائية: بعضها قابل للإسناد، وبعضها لا يُسنَد إلا أثناء التهيئة، وبعضها له دوال إسناد خاصة. وهذا يحافظ على إيجاز الفئة ووضوحها.

using System;

class BankAccount
{
    public string Owner { get; init; }
    public decimal Balance { get; private set; }

    public void Deposit(decimal amount)
    {
        Balance += amount;
    }
}

class Program
{
    static void Main()
    {
        var acct = new BankAccount { Owner = "Lin" };
        acct.Deposit(250m);
        Console.WriteLine(acct.Owner + ": " + acct.Balance);
    }
}

تحقق سريع

اختبر فهمك للخصائص المنفذة تلقائيًا.

مراجعة

تعلمت أن الخصائص المنفذة تلقائيًا تستخدم { get; set; } مع حقل إسناد ينشئه المترجم. وتشمل الاختلافات الصيغة المخصصة للقراءة فقط { get; }، وprivate set للتحكم في التغيير، وinit للقيم التي تُسنَد مرة واحدة. وهي الطريقة الافتراضية لعرض البيانات في الفئة.

using System;

class Demo
{
    public string A { get; set; } = "settable";
    public string B { get; } = "read-only";
    public string C { get; init; } = "init-only";
}

class Program
{
    static void Main()
    {
        var d = new Demo { C = "changed-at-init" };
        Console.WriteLine(d.A + ", " + d.B + ", " + d.C);
    }
}

الأسئلة الشائعة

هل درس «الخصائص المُطبَّقة تلقائيًا» مجاني؟

نعم — نص درس «الخصائص المُطبَّقة تلقائيًا» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة C# Academy، انتقل إلى CoddyKit PRO. تتضمن دورة C# Academy 4 دروس في المجموع.

ماذا ستتعلم في «الخصائص المُطبَّقة تلقائيًا»؟

صرّحوا عن الخصائص باستخدام صيغة تلقائية موجزة تتمرن على C# Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.

هل أحتاج إلى خبرة سابقة لأبدأ C# Academy؟

لا تُشترط خبرة سابقة. C# Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 1 من أصل 4.

كم من الوقت يستغرق درس «الخصائص المُطبَّقة تلقائيًا»؟

معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.

هل يمكنني كتابة وتشغيل أكواد في درس C# Academy هذا؟

نعم. كل درس في C# Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.

جميع الدروس في هذه الدورة

  1. الخصائص المُطبَّقة تلقائيًا
  2. الخصائص الكاملة مع الحقول الداعمة
  3. الأعضاء ذات جسم التعبير
  4. المفهرسات
← العودة إلى C# Academy