سؤال

في الكود التالي ، كيف - من حيث إدارة الذاكرة - هو 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") ومع حقل واحد من النوع غير معروف يكتب.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top