مبدئيا:
1. كما هو الحال مع قوالب C++، فإن جوهر الأدوية العامة لـ C# هو نوع النوع.
فهو يحدد نوعًا، وكل كائن تم إنشاء مثيل له هو نوع معين، لذلك يسمى نوعًا من النوع
2. ينقسم عند حدوثه إلى حالتين:
أنواع المراجع وأنواع القيمة
نظرًا لأن نوع المرجع هو في الأساس مؤشر، وهو عنوان ذاكرة، فإن عدد البايتات المستخدمة بواسطة متغير المؤشر هو نفسه على جهاز بطول بت معين، على سبيل المثال، يستخدم جهاز 32 بت 4 بايت.
جوهر الأدوية العامة هو نوع من النوع المحدد، بعد التجميع، سيكون هناك رمز ثنائي يصف خصائص تعريف هذا النوع، والذي يتم تخزينه في الذاكرة.
نصف هنا أولاً تعريف النوع وتخصيص الذاكرة للكائنات التي تم إنشاء مثيل لها بعد تجميع التعليمات البرمجية المصدر، بعد تجميع التعليمات البرمجية المصدر، يجب برمجة ملف برنامج (مثل ملف exe) وتحميله في مساحة الذاكرة أثناء التنفيذ (نظام التشغيل الحديث). يستخدم التعيين، ويشغل الذاكرة منطقيًا، ويستخدم طريقة الترحيل فعليًا، ويستخدم أي جزء من البيانات لنقل هذا الجزء من البيانات إلى الذاكرة الفعلية)؛
عند تحديد فئة، يشكل وصف الفئة بعد التجميع (معلومات حول أعضاء البيانات، ووظائف الأعضاء، والأذونات المعنية، وما إلى ذلك) جزءًا من ملف exe، والذي يتم تحميله في الذاكرة بعد تشغيل هذا الجزء يتم تعيين البيانات الثنائية على عنوان الذاكرة وهو 0x0001؛
عند إنشاء كائن فئة، يعتمد ذلك على اللغة. في C++، يخصص كائن إنشاء مثيل للفئة الذاكرة على المكدس؛ في C#، يخصص كائن إنشاء مثيل للفئة الذاكرة في الكومة؛ المساحة (مثل نظام Windows 32 بت، مساحة ذاكرة البرنامج هي 4G). في الذاكرة المتبقية بخلاف الذاكرة المعينة بواسطة exe، عندما يتجاوز الكائن الذي تم إنشاء مثيله العمر الافتراضي أو يتم تحريره من الكومة، يتم إرجاع مساحة الذاكرة. لهذه العملية.
وبالمثل، يتم تضمين البيانات الثنائية العامة المشفرة في ملف exe ويتم تحميلها في الذاكرة.
عندما يتم إنشاء مثيل عام، أي عند تجميع نوع معين (لاحظ أن عملية إنشاء مثيل عام في C# يتم إجراؤها أثناء التجميع، أي النوع العام الذي تم إنشاء مثيل له المستخدم في التعليمات البرمجية، لكل نوع محدد، ثنائي يتم إنشاء الكود أثناء التجميع، ويتم كتابة الكود الثنائي الخاص بالعامة نفسه في ملف exe). ما مقدار المساحة التي يحتاجها الكود الثنائي لكل نوع تم إنشاء مثيل له في ملف exe؟
في لغة C#، نحتاج إلى التمييز بين أنواع المراجع وأنواع القيم. لنفترض أن النوع العام يقوم بإنشاء نوعين مرجعيين ونوعين من القيم في الكود المصدري للبرنامج.
ثم بالنسبة للأنواع المرجعية:
يستخدم أحدهما مؤشرًا مكونًا من 4 بايت، بينما يستخدم الآخر مؤشرين. تشير البيانات الثنائية إلى النوع المستخدم (مثل myClass في المتجه<myClass>. myClass هو نوع فئة محدد. بعد التجميع، يتم تخزين البيانات الثنائية في ملف exe. ) (يتم تحويل العنوان النسبي إلى عنوان ذاكرة بعد تحميله في الذاكرة). وذلك لأن الكائن الذي تم إنشاء مثيل له من النوع المرجعي يتم تخصيصه في الكومة وتنفيذه في وقت التشغيل، ويحصل العنوان على الثنائي من المؤشر البيانات الموصوفة بواسطة نوع myClass، تحسب مساحة الذاكرة التي يشغلها كائن تم إنشاء مثيل له، وتخصيصها في الكومة.
لأنواع القيمة:
تتضمن أنواع القيم الهياكل وأنواع البيانات المحددة مسبقًا. عند إنشاء مثيلات عامة باستخدام مثل هذه الأنواع (مثل المتجه <int>، المتجه <double>)، سيتم إنشاء البيانات الثنائية الفعلية للفئتين لتمثيلهما، بحيث يتم إنشاء مثيل لها كائناتها في البرنامج سريعة (بالطبع، يمكن أيضًا حسابها وترميزها في وقت التشغيل كمرجع)، ولكن يتم تخصيص نوع القيمة على المكدس، ويتم فقدان المرونة من أجل الحصول على الكفاءة، لذا نفذ مثله)