0Pricing
C# Academy · درس

البُناة الأساسيون مع Structs

طبّقوا البُناة الأساسيين على أنواع القيم

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

المُنشئات الأساسية في البنى

تدعم البنى المُنشئات الأساسية أيضًا: struct Point(int x, int y). وهي تعمل إلى حد كبير كما في الفئات، إذ تُعلن المعلمات في الترويسة.

using System;

struct Point(int x, int y) {
    public int X => x;
    public int Y => y;
}

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

يبقى المُنشئ الخالي من المعلمات موجودًا

تحتوي البنى دائمًا على مُنشئ ضمني خالٍ من المعلمات ينتج القيمة الافتراضية. ويضيف المُنشئ الأساسي مُنشئًا آخر ذا معلمات إلى جانبه.

using System;

struct Vec(int x, int y) {
    public int X => x;
    public int Y => y;
}

var zero = new Vec(); // default: x=0, y=0
Console.WriteLine(zero.X + "," + zero.Y); // 0,0

عرض المعلمات عبر الخصائص

كما هو الحال في الفئات، لا تصبح معلمات المُنشئ الأساسي للبنية خصائص عامة تلقائيًا؛ لذا اعرضوها صراحةً.

using System;

struct Size(int w, int h) {
    public int Width { get; } = w;
    public int Height { get; } = h;
}

var s = new Size(10, 20);
Console.WriteLine(s.Width * s.Height); // 200

الأعضاء المحسوبة

تتوافق المُنشئات الأساسية للبنى جيدًا مع الأعضاء المحسوبة ذات الصياغة المعتمدة على التعبير.

using System;

struct Complex(double re, double im) {
    public double Magnitude => Math.Sqrt(re * re + im * im);
}

Console.WriteLine(new Complex(3, 4).Magnitude); // 5

البنى للقراءة فقط

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

using System;

readonly struct Money(decimal amount, string currency) {
    public decimal Amount { get; } = amount;
    public string Currency { get; } = currency;
    public string Display => Amount.ToString("0.00") + " " + Currency;
}

Console.WriteLine(new Money(5m, "USD").Display); // 5.00 USD

التسلسل إلى المُنشئ الأساسي

يجب أن تستدعي مُنشئات البنية الإضافية المُنشئ الأساسي باستخدام : this(...)، تمامًا كما في الفئات.

using System;

struct Square(int side) {
    public int Side => side;
    public int Area => side * side;
    public Square() : this(1) { } // explicit default side
}

Console.WriteLine(new Square(4).Area); // 16

المُنشئ الافتراضي في مقابل المُنشئ الأساسي

لاحظوا أن new Square() يمكنه استخدام التهيئة الصفرية الضمنية أو المُنشئ الخالي من المعلمات الذي أعلنتموه. وإذا عرّفتم مُنشئًا يستدعي مُنشئًا آخر، فسيُنفَّذ منطقكم.

using System;

struct Pct(double value) {
    public double Value { get; } = value;
    public Pct() : this(100) { }
}

Console.WriteLine(new Pct().Value); // 100

تبقى دلالات القيمة كما هي

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

using System;

struct Counter(int n) {
    public int N { get; set; } = n;
}

var a = new Counter(1);
var b = a;       // copy
b.N = 99;
Console.WriteLine(a.N + " " + b.N); // 1 99

تهيئة الحقول القابلة للتغيير

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

using System;

struct Bag(int capacity) {
    public int Capacity { get; set; } = capacity;
    public int Used { get; set; } = 0;
}

var bag = new Bag(10);
bag.Used = 3;
Console.WriteLine(bag.Capacity - bag.Used); // 7

التفكيك

يمكنكم دمج مُنشئ أساسي مع أسلوب Deconstruct للحصول على فك تجميع شبيه بفك تجميع الصفوف.

using System;

struct Point(int x, int y) {
    public int X => x;
    public int Y => y;
    public void Deconstruct(out int a, out int b) { a = x; b = y; }
}

var (px, py) = new Point(7, 8);
Console.WriteLine(px + "," + py); // 7,8

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

نوع قيمة صغير وغير قابل للتغيير، أُنشئ باستخدام بنية للقراءة فقط ومُنشئ أساسي.

using System;

readonly struct Temperature(double celsius) {
    public double Celsius { get; } = celsius;
    public double Fahrenheit => Celsius * 9 / 5 + 32;
}

var t = new Temperature(25);
Console.WriteLine(t.Fahrenheit); // 77

تحقق سريع

اختبروا مدى استيعابكم للمُنشئات الأساسية في البنى.

مراجعة

تعلّمتم المُنشئات الأساسية في البنى.

  • يُعلن struct P(int x, int y) المعلمات في الترويسة.
  • يبقى المُنشئ الضمني الخالي من المعلمات موجودًا.
  • يمكن دمجه مع readonly struct لإنشاء أنواع قيم غير قابلة للتغيير.
  • تتسلسل المُنشئات الإضافية باستخدام : this(...).

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

هل درس «البُناة الأساسيون مع Structs» مجاني؟

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

ماذا ستتعلم في «البُناة الأساسيون مع Structs»؟

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

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

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

كم من الوقت يستغرق درس «البُناة الأساسيون مع Structs»؟

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

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

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

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

  1. البُناة الأساسيون في الفئات
  2. التقاط المعاملات في الأعضاء
  3. البُناة الأساسيون مع Structs
  4. الدمج مع الخصائص والأنواع الأساسية
← العودة إلى C# Academy