0Pricing
C# Academy · درس

المُعدِّل required

أجبِروا المستدعين على تعيين الخصائص الأساسية

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

مُعدِّل required

يفرض مُعدِّل required على المستدعين تعيين خاصية أو حقل عند إنشاء كائن. وينقل أخطاء «نسيتم قيمة» من وقت التشغيل إلى وقت الترجمة.

using System;

class Person {
    public required string Name { get; init; }
}

var p = new Person { Name = "Ada" };
Console.WriteLine(p.Name); // Ada

يؤدي إغفال عضو required إلى فشل الترجمة

إذا أغفل المستدعي عضوًا من نوع required، يُبلغ المترجم عن خطأ قبل تشغيل البرنامج.

using System;

class Person {
    public required string Name { get; init; }
}

// var bad = new Person { }; // compile error: Name is required
var good = new Person { Name = "Lin" };
Console.WriteLine(good.Name); // Lin

required مع init

يتوافق required طبيعيًا مع init: يجب توفير القيمة أثناء الإنشاء، ولا يمكن تغييرها بعد ذلك.

using System;

class Config {
    public required string Url { get; init; }
    public int Timeout { get; init; } = 30;
}

var c = new Config { Url = "https://api" };
Console.WriteLine(c.Url + " " + c.Timeout); // https://api 30

required مع set

يمكنكم أيضًا تحديد خاصية قابلة للتعيين على أنها required. يجب تهيئتها، لكن يمكن تغييرها لاحقًا.

using System;

class Box {
    public required int Size { get; set; }
}

var b = new Box { Size = 5 };
b.Size = 10; // still mutable
Console.WriteLine(b.Size); // 10

الحقول من نوع required

يمكن أن تكون الحقول من نوع required أيضًا، وليس الخصائص وحدها.

using System;

class Token {
    public required string Value;
}

var t = new Token { Value = "abc123" };
Console.WriteLine(t.Value); // abc123

المُنشئات و required

إذا عيّن مُنشئ عضوًا من نوع required، فلن يعود على المستدعين الذين يستخدمون هذا المُنشئ تعيينه. استخدموا [SetsRequiredMembers] لإبلاغ المترجم بذلك.

using System;
using System.Diagnostics.CodeAnalysis;

class Person {
    public required string Name { get; init; }
    [SetsRequiredMembers]
    public Person(string name) => Name = name;
}

Console.WriteLine(new Person("Sam").Name); // Sam

مزج required والاختياري

الأعضاء التي تحددونها فقط تكون إلزامية؛ أما الأعضاء الأخرى فتبقى اختيارية مع قيمها الافتراضية.

using System;

class Account {
    public required string Owner { get; init; }
    public decimal Balance { get; init; } = 0m;
}

var a = new Account { Owner = "Kai" };
Console.WriteLine(a.Owner + " " + a.Balance); // Kai 0

required في الوراثة

تُورث الأعضاء من نوع required. ويمكن للفئة المشتقة إضافة أعضائها الإلزامية، ويجب استيفاء جميع الأعضاء.

using System;

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

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

استبدال المُنشئات الكبيرة

غالبًا ما يستبدل required + init المُنشئات الكبيرة؛ إذ تحصلون على أعضاء إلزامية مع صياغة مُهيِّئ كائن سهلة القراءة.

using System;

class Email {
    public required string To { get; init; }
    public required string Subject { get; init; }
    public string Body { get; init; } = "";
}

var e = new Email { To = "a@b.com", Subject = "Hi" };
Console.WriteLine(e.To + " | " + e.Subject); // a@b.com | Hi

توضيح النية ذاتيًا

يوضّح تحديد الأعضاء على أنها required القيم الأساسية، مما يجعل استخدام النوع بطريقة صحيحة أسهل.

using System;

class Registration {
    public required string Username { get; init; }
    public required string Password { get; init; }
    public bool Newsletter { get; init; }
}

var r = new Registration { Username = "ada", Password = "x" };
Console.WriteLine(r.Username); // ada

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

نوع يجمع بين الأعضاء الإلزامية والاختيارية والمتحقق منها.

using System;

class Server {
    public required string Host { get; init; }
    public int Port { get; init; } = 8080;
    public string Address => Host + ":" + Port;
}

var s = new Server { Host = "localhost" };
Console.WriteLine(s.Address); // localhost:8080

تحقق سريع

تحققوا مما يضمنه مُعدِّل required.

مراجعة

تعلّمتم مُعدِّل required.

  • يفرض على المستدعين تهيئة العضو عند الإنشاء، ويتحقق المترجم من ذلك.
  • يتوافق مع init لإنشاء أعضاء إلزامية غير قابلة للتغيير.
  • يتيح [SetsRequiredMembers] للمُنشئ استيفاء المتطلب.
  • تُورث الأعضاء من نوع required.

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

هل درس «المُعدِّل required» مجاني؟

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

ماذا ستتعلم في «المُعدِّل required»؟

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

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

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

كم من الوقت يستغرق درس «المُعدِّل required»؟

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

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

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

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

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