0Pricing
C# Academy · درس

عوامل الضبط التي لا تعمل إلا مع init

أنشئوا خصائص لا يمكن ضبطها إلا وقت التهيئة

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

أدوات التعيين init فقط

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

using System;

class Point {
    public int X { get; init; }
    public int Y { get; init; }
}

var p = new Point { X = 3, Y = 4 };
Console.WriteLine(p.X + "," + p.Y); // 3,4

التعيين أثناء التهيئة فقط

بعد إنشاء الكائن، يؤدي الإسناد إلى خاصية init إلى خطأ في الترجمة، مما يضمن عدم قابلية التغيير بعد الإنشاء.

using System;

class Config {
    public string Name { get; init; }
}

var c = new Config { Name = "prod" };
// c.Name = "dev"; // compile error
Console.WriteLine(c.Name); // prod

تظل مُهيِّئات الكائنات متاحة

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

using System;

class Settings {
    public bool DarkMode { get; init; }
    public int FontSize { get; init; }
}

var s = new Settings { DarkMode = true, FontSize = 14 };
Console.WriteLine(s.DarkMode + " " + s.FontSize); // True 14

الدمج مع المُنشئات

يمكنكم تعيين خصائص init من مُنشئ، والسماح أيضًا بتجاوزها في مُهيِّئات الكائنات.

using System;

class User {
    public string Role { get; init; } = "guest";
    public User() { }
}

var u = new User { Role = "admin" };
Console.WriteLine(u.Role); // admin

القيم الافتراضية

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

using System;

class Options {
    public int Retries { get; init; } = 3;
}

Console.WriteLine(new Options().Retries);            // 3
Console.WriteLine(new Options { Retries = 5 }.Retries); // 5

init في مقابل set

يتيح مُلحق set تغيير القيمة في أي وقت، بينما يقيّد init الإسناد بمرحلة الإنشاء. اختاروا init للبيانات غير القابلة للتغيير بعد الإنشاء.

using System;

class Mutable { public int V { get; set; } }
class Frozen  { public int V { get; init; } }

var m = new Mutable { V = 1 };
m.V = 2; // allowed
Console.WriteLine(m.V); // 2

init مع التحقق

يمكنكم تنفيذ جسم صريح لـ init مع حقل داعم للتحقق من القيمة المُسنَدة.

using System;

class Percentage {
    private int _value;
    public int Value {
        get => _value;
        init => _value = (value < 0 || value > 100)
            ? throw new ArgumentOutOfRangeException()
            : value;
    }
}

Console.WriteLine(new Percentage { Value = 80 }.Value); // 80

init في السجلات

تكون خصائص السجلات الموضعية من نوع init فقط افتراضيًا، ولذلك تظل السجلات غير قابلة للتغيير مع دعم النسخ باستخدام with.

using System;

record Account(string Id, decimal Balance);

var a = new Account("A1", 100m);
Console.WriteLine(a.Balance); // 100

مُهيِّئات الكائنات المتداخلة

يعمل init مع مُهيِّئات الكائنات المتداخلة، مما يتيح لكم إنشاء هياكل كائنات معقدة وغير قابلة للتغيير في تعبير واحد.

using System;

class Address { public string City { get; init; } }
class Person { public string Name { get; init; } public Address Home { get; init; } }

var p = new Person { Name = "Lin", Home = new Address { City = "Oslo" } };
Console.WriteLine(p.Name + " / " + p.Home.City); // Lin / Oslo

init والوراثة

يمكن للفئات المشتقة تعيين خصائص init الموروثة من الفئة الأساسية عبر مُهيِّئات الكائنات، لأن مرحلة الإنشاء تشمل الكائن بأكمله.

using System;

class Base { public int Id { get; init; } }
class Item : Base { public string Name { get; init; } }

var i = new Item { Id = 1, Name = "Pen" };
Console.WriteLine(i.Id + " " + i.Name); // 1 Pen

تجميع المفاهيم

كائن نقل بيانات غير قابل للتغيير، أُنشئ بالكامل باستخدام خصائص init ومُهيِّئ كائن.

using System;

class OrderDto {
    public int Id { get; init; }
    public string Customer { get; init; }
    public decimal Amount { get; init; }
}

var o = new OrderDto { Id = 7, Customer = "Ada", Amount = 49.9m };
Console.WriteLine(o.Id + " " + o.Customer + " " + o.Amount); // 7 Ada 49.9

تحقق سريع

اختبروا مدى فهمكم لأدوات التعيين init فقط.

مراجعة

تعلّمتم أدوات التعيين init فقط.

  • تتيح { get; init; } الإسناد أثناء الإنشاء فقط.
  • تعمل مُهيِّئات الكائنات مع خصائص init.
  • يمكنكم إضافة التحقق عبر جسم صريح لـ init.
  • تكون خصائص السجلات الموضعية من نوع init افتراضيًا.

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

هل درس «عوامل الضبط التي لا تعمل إلا مع init» مجاني؟

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

ماذا ستتعلم في «عوامل الضبط التي لا تعمل إلا مع init»؟

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

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

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

كم من الوقت يستغرق درس «عوامل الضبط التي لا تعمل إلا مع init»؟

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

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

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

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

  1. عوامل الضبط التي لا تعمل إلا مع init
  2. المُعدِّل required
  3. أنماط الكائنات غير القابلة للتغيير
  4. تعبيرات with في Records
← العودة إلى C# Academy