Frage

Im folgenden Code ist, wie - in Bezug auf die Speicherverwaltung - ist class A zugewiesen und in .NET (C#) zugewiesen und ausgeführt.

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;
}

HINWEIS: Dass die Verwendung von class B könnte entweder der Einstiegspunkt des Programms oder eine Objektinstanz sein, aber der Umfang hier ist die Speicherverwaltung und die Zuweisung der Instanz von class A.

War es hilfreich?

Lösung

Die Zeile, die Sie beschreiben, verteilt eine einzelne Instanz von A Auf dem Haufen, wenn Sie eine neue Instanz von erstellen B. So,

B b = new B();

wird zwei Objekte zuweisen: einer B mit dem direkten Anruf und einem A als Teil des Konstruktions der B.

Die Linie selbst tut nichts bis Sie eine Instanz von erstellen B.

A Scheint drei Felder zu haben, die keine Referenzfelder sind, so dass es keine neuen Objekte auf dem Haufen erstellt, sondern Teil des A Beispiel.

Das ist ungefähr das ganze Gedächtnis, das in diesem Beispiel zugewiesen wird.

BEARBEITEN:

Für die Zwecke der größeren Klarheit - ein Referenzlink zu einem Artikel, der Stack und Heap sowie Überlegungen zur Speicherallokation erläutert:http://www.simple-talk.com/dotnet/.net-framework/.net-memory-management-basics/

Andere Tipps

Wenn Sie eine Instanz von B erstellen, wird der Speicher für 1 Objekt mit einem Feld des Referenztyps ("A") zugewiesen. Gleich nach dieser neuen Instanz von a wird erstellt, die eine Speicherverteilung für Objekt mit zwei "int" -Feldern ("x", "y") und mit einem Feld von verursacht Typ ist unbekannt Typ.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top