الهياكل: دلالات القيمة ونمط عدم القابلية للتغيير
افهم دلالات القيمة للهياكل في C# 6، وأنشئ نمط بنية غير قابل للتغيير (النسخ عند التغيير).
الهياكل: دلالات القيمة ونمط عدم القابلية للتغيير درس مجاني في C# Academy على CoddyKit. هذا هو الدرس 1 من أصل 3. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في C# Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة C# Academy 3 دروس في المجموع.
نظرة عامة على الهياكل
الهدف: استخدام الهياكل بأمان.
- دلالات القيمة (النسخ عند الإسناد)
- نمط الهيكل غير القابل للتغيير في C# 6
- التمرير بالقيمة مقابل التمرير بالمرجع
- ملاحظة حول Boxing
دلالات النسخ
الهياكل هي أنواع قيم: يؤدي الإسناد إلى إنشاء نسخة. ولا يؤدي تغيير النسخة إلى تغيير الأصل.
using System;
// Simple struct with public fields for demo (okay for small POD data)
public struct Point
{
public int X;
public int Y;
}
public class Program
{
public static void Main(string[] args)
{
Point a = new Point();
a.X = 1; a.Y = 2;
Point b = a; // copy the value
b.X = 9; // change the copy
Console.WriteLine("a=(" + a.X + "," + a.Y + ")");
Console.WriteLine("b=(" + b.X + "," + b.Y + ")"); // different from a
}
}
نمط الهيكل غير القابل للتغيير
فضّل الهياكل غير القابلة للتغيير: حقول للقراءة فقط، ومُنشئ للحالة المطلوبة، وأدوات مساعدة صغيرة باسم With لإنشاء قيم جديدة.
using System;
// Immutable struct pattern (C# 6): readonly fields + constructor + With method
public struct Money
{
private readonly decimal _amount;
private readonly string _currency;
public decimal Amount { get { return _amount; } }
public string Currency { get { return _currency; } }
public Money(decimal amount, string currency)
{
_amount = amount;
_currency = currency ?? "USD";
}
// Copy-on-change: returns a new value with updated amount
public Money WithAmount(decimal amount)
{
return new Money(amount, _currency);
}
}
public class Program
{
public static void Main(string[] args)
{
Money m1 = new Money(10m, "USD");
Money m2 = m1.WithAmount(15m); // new value
Console.WriteLine("m1: " + m1.Amount + " " + m1.Currency);
Console.WriteLine("m2: " + m2.Amount + " " + m2.Currency);
}
}
بالقيمة مقابل بالمرجع
تتلقى الأساليب نسخة افتراضيًا. استخدم ref لتعديل هيكل المستدعي.
using System;
public struct Counter
{
public int Value;
}
public class Program
{
static void IncrementByValue(Counter c)
{
c.Value = c.Value + 1; // changes only the local copy
}
static void IncrementByRef(ref Counter c)
{
c.Value = c.Value + 1; // changes the caller's variable
}
public static void Main(string[] args)
{
Counter a = new Counter();
IncrementByValue(a);
Console.WriteLine("After by-value: " + a.Value); // 0
IncrementByRef(ref a);
Console.WriteLine("After by-ref: " + a.Value); // 1
}
}
أساسيات Boxing
ينسخ Boxing هيكلًا إلى مرجع كائن أو واجهة. وينشئ Unboxing نسخة أخرى.
using System;
public interface IShow { string Show(); }
public struct Temperature : IShow
{
public int C;
public string Show() { return C + "C"; }
}
public class Program
{
public static void Main(string[] args)
{
Temperature t = new Temperature();
t.C = 25;
object boxed = t; // boxing: copy into object
Temperature copy = (Temperature)boxed; // unbox (another copy)
copy.C = 30;
Console.WriteLine("t = " + t.C); // 25
Console.WriteLine("copy = " + copy.C); // 30
}
}
نصائح الهياكل
نصائح:
- استخدم الهياكل لكائنات القيم الصغيرة وغير القابلة للتغيير (مثل الإحداثيات والمال).
- تجنّب الهياكل الكبيرة أو القابلة للتغيير بدرجة كبيرة.
- تذكّر إنشاء نسخ عند الإسناد وعند التمرير بالقيمة.
- انتبه إلى Boxing عند التحويل إلى object أو interface.
دلالات قيمة الهيكل
مراجعة
مراجعة: الهياكل هي أنواع قيم. فضّل التصاميم الصغيرة وغير القابلة للتغيير (مُنشئ + حقول للقراءة فقط + With). واعرف كيف يؤثر التمرير بالقيمة مقابل ref وBoxing في النسخ.
الأسئلة الشائعة
هل درس «الهياكل: دلالات القيمة ونمط عدم القابلية للتغيير» مجاني؟
نعم — نص درس «الهياكل: دلالات القيمة ونمط عدم القابلية للتغيير» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة C# Academy، انتقل إلى CoddyKit PRO. تتضمن دورة C# Academy 3 دروس في المجموع.
ماذا ستتعلم في «الهياكل: دلالات القيمة ونمط عدم القابلية للتغيير»؟
افهم دلالات القيمة للهياكل في C# 6، وأنشئ نمط بنية غير قابل للتغيير (النسخ عند التغيير). تتمرن على C# Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.
هل أحتاج إلى خبرة سابقة لأبدأ C# Academy؟
لا تُشترط خبرة سابقة. C# Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 1 من أصل 3.
كم من الوقت يستغرق درس «الهياكل: دلالات القيمة ونمط عدم القابلية للتغيير»؟
معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.
هل يمكنني كتابة وتشغيل أكواد في درس C# Academy هذا؟
نعم. كل درس في C# Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.
جميع الدروس في هذه الدورة
- الهياكل: دلالات القيمة ونمط عدم القابلية للتغيير
- الأنواع الشبيهة بالسجلات والمساواة القائمة على القيمة (نمط)
- التعدادات و[Flags]