إدارة الذاكرة لفئة [مغلقة
-
27-09-2019 - |
سؤال
في الكود التالي ، كيف - من حيث إدارة الذاكرة - هو class A
تخصيص وتخصيص في .NET (C#).
class A
{
public static m1(int x, int y)
{
int x, y;
return x+y;
}
int m2(int p, int q)
{
int p, int q;
return p+q;
}
int x=10;
int y;
const int x=10;
readOnly y=20;
public int x
{
get {y}
set {y=value}
}
}
class B
{
A a=new A(); // what happens when initializing class A;
}
ملاحظة: أن استخدام class B
يمكن أن تكون إما نقطة دخول البرنامج ، أو مثيل كائن ، ولكن النطاق هنا هو إدارة الذاكرة وتخصيص مثيل class A
.
المحلول
الخط الذي تصفه يخصص مثيلًا واحدًا من A
على الكومة عند إنشاء مثيل جديد B
. لذا،
B b = new B();
سوف تخصيص كائنين: واحد B
مع المكالمة المباشرة والآخر A
كجزء من بناء B
.
الخط نفسه يفعل ولا شيء حتى تقوم بإنشاء مثيل B
.
A
يبدو أن لديها ثلاثة حقول ليست حقول مرجعية ، لذلك لا تنشئ كائنات جديدة على الكومة ولكنها جزء من A
نموذج.
هذا هو كل الذاكرة التي تم تخصيصها في هذا المثال تقريبًا.
تعديل:
لأغراض وضوح أكبر - رابط مرجعي لمقال يشرح المكدس والكواد ، واعتبارات تخصيص الذاكرة:http://www.simple-talk.com/dotnet/.net-framework/.net-memory-management-basics/
نصائح أخرى
عند إنشاء مثيل من B ، يتم تخصيص الذاكرة لكائن واحد مع حقل واحد من نوع المرجع ("A"). مباشرة بعد ذلك يتم إنشاء مثيل جديد من A والذي يسبب تخصيص الذاكرة للكائن مع اثنين من الحقول "int" ("X" ، "Y") ومع حقل واحد من النوع غير معروف يكتب.