تمرين - اكتشاف أنواع المراجع
- 8 دقائق
تتضمن الأنواع المرجعية صفائف وفئات وسلاسل. يتم التعامل مع أنواع المراجع بشكل مختلف عن أنواع القيم فيما يتعلق بالطريقة التي يتم بها تخزين القيم عند تنفيذ التطبيق.
في هذا التمرين، ستتعرف على كيفية اختلاف أنواع المراجع عن أنواع القيم، وكيفية استخدام new عامل التشغيل لإقران متغير بقيمة في ذاكرة الكمبيوتر.
كيف تختلف الأنواع المرجعية عن أنواع القيم
يخزن متغير نوع القيمة قيمه مباشرة في منطقة تخزين تسمى المكدس. والتكدس هو الذاكرة المخصصة للتعليمات البرمجية التي تعمل حاليًا على وحدة المعالجة المركزية (تعرف أيضًا بإطار التكدس أو إطار التنشيط). عند انتهاء إطار التكدس من التنفيذ، تتم إزالة القيم الموجودة في التكدس.
يخزن متغير نوع المرجع قيمه في منطقة ذاكرة منفصلة تسمى كومة الذاكرة المؤقتة. وكومة الذاكرة المؤقتة هي منطقة ذاكرة مشتركة عبر العديد من التطبيقات التي تعمل على نظام تشغيل في نفس الوقت. يتصل .NET Runtime مع نظام التشغيل لتحديد ما هي عناوين الذاكرة المتوفرة، ويطلب عنوان حيث يمكنه تخزين القيمة. يخزن .NET Runtime القيمة، ثم إرجاع عنوان الذاكرة إلى المتغير. عندما تستخدم تعليماتك البرمجية للمتغير، يبحث .NET Runtime بسهولة عن العنوان المخزن في المتغير، ويسترد القيمة المخزنة هناك.
ستكتب بعد ذلك بعض التعليمات البرمجية التي توضح هذه الأفكار بشكل أكثر وضوحا.
تعريف متغير نوع المرجع
احذف عامل تشغيل
//تعليق السطر أو استخدمه للتعليق على جميع التعليمات البرمجية من التدريبات السابقة.تحديث التعليمات البرمجية الخاصة بك في محرر التعليمات البرمجية Visual Studio كما يلي:
int[] data;تحدد التعليمات البرمجية السابقة متغيرا يمكنه الاحتفاظ بقيمة صفيف النوع
int.في هذه المرحلة،
dataهو مجرد متغير يمكن أن يحتوي على مرجع، أو بدلا من ذلك، عنوان ذاكرة لقيمة في كومة الذاكرة المؤقتة. لأنه لا يشير إلى عنوان ذاكرة، فإنه يسمى مرجعا فارغا.إنشاء مثيل صفيف
intباستخدامnewالكلمة الأساسيةقم بتحديث التعليمات البرمجية الخاصة بك في محرر التعليمات البرمجية Visual Studio لإنشاء وتعيين مثيل جديد من
intالصفيف، باستخدام التعليمات البرمجية التالية:int[] data; data = new int[3];تقوم
newالكلمة الأساسية بإعلام .NET Runtime لإنشاء مثيل صفيفint، ثم التنسيق مع نظام التشغيل لتخزين حجم الصفيف لثلاث قيم int في الذاكرة. يتوافق وقت تشغيل .NET، ويعيد عنوان ذاكرة الصفيف الجديدint. وأخيرًا، يتم تخزين عنوان الذاكرة في البيانات المتغيرة.intعناصر الصفيف افتراضية إلى القيمة0، لأن هذه هي القيمة الافتراضية لint.تعديل مثال التعليمات البرمجية لتنفيذ كلتا العمليتين في سطر واحد من التعليمات البرمجية
عادة ما يتم اختصار سطري التعليمات البرمجية في الخطوة السابقة إلى سطر واحد من التعليمات البرمجية للإعلان عن المتغير وإنشاء مثيل جديد للصفيف
int. تعديل التعليمات البرمجية من الخطوة 3 إلى ما يلي.int[] data = new int[3];على الرغم من عدم وجود إخراج لملاحظته، نأمل أن يضيف هذا التمرين توضيحا لكيفية ارتباط بناء جملة C# بخطوات عملية العمل مع الأنواع المرجعية.
ما المختلف في نوع بيانات سلسلة C#؟
string نوع البيانات هو أيضا نوع مرجع. قد تتساءل عن سبب new عدم استخدام عامل تشغيل عند الإعلان عن سلسلة. هذا للراحة البحتة التي يوفرها مصممو C#.
string نظرا لاستخدام نوع البيانات بشكل متكرر، يمكنك استخدام هذا التنسيق:
string shortenedString = "Hello World!";
Console.WriteLine(shortenedString);
ومع ذلك، في الخلفية، يتم إنشاء مثيل جديد من System.String وتهيئته إلى "مرحبًا العالم!".
المخاوف العملية باستخدام أنواع القيم والمراجع
-
نوع القيمة (int): في هذا المثال،
val_Aوهيval_Bأنواع قيم عدد صحيح.
int val_A = 2;
int val_B = val_A;
val_B = 5;
Console.WriteLine("--Value Types--");
Console.WriteLine($"val_A: {val_A}");
Console.WriteLine($"val_B: {val_B}");
ينبغي أن تشاهد المخرج التالي:
--Value Types--
val_A: 2
val_B: 5
عند val_B = val_A تنفيذها، يتم نسخ قيمة val_A وتخزينها في val_B. لذلك، عندما val_B يتغير، val_A يظل غير متأثر.
-
نوع المرجع (صفيف): في هذا المثال،
ref_Aوهيref_Bأنواع مراجع الصفيف.
int[] ref_A= new int[1];
ref_A[0] = 2;
int[] ref_B = ref_A;
ref_B[0] = 5;
Console.WriteLine("--Reference Types--");
Console.WriteLine($"ref_A[0]: {ref_A[0]}");
Console.WriteLine($"ref_B[0]: {ref_B[0]}");
ينبغي أن تشاهد المخرج التالي:
--Reference Types--
ref_A[0]: 5
ref_B[0]: 5
عند ref_B = ref_A تنفيذ، ref_B يشير إلى نفس موقع الذاكرة مثل ref_A. لذلك، عند ref_B[0] تغيير، ref_A[0] يتغير أيضا لأنهما يشيران إلى نفس موقع الذاكرة. هذا هو الفرق الرئيسي بين أنواع القيم وأنواع المراجع.
خلاصة
- يمكن أن تحتوي أنواع القيم على قيم أصغر ويتم تخزينها في التكدس. يمكن أن تحتوي أنواع المراجع على قيم كبيرة، ويتم إنشاء مثيل جديد لنوع مرجع باستخدام
newعامل التشغيل . تحتوي متغيرات نوع المرجع على مراجع (عنوان الذاكرة) إلى القيمة الفعلية المخزنة في كومة الذاكرة المؤقتة. - تتضمن أنواع المراجع صفائف وسلاسل وفئات.
اختبر معلوماتك
الملاحظات
هل كانت هذه الصفحة مفيدة؟
لا
هل تحتاج إلى مساعدة مع هذا الموضوع؟
هل تريد محاولة استخدام Ask Learn لتوضيح هذا الموضوع أو إرشادك خلاله؟