Frage

Guids werden mit dem erstellt new Schlüsselwort, das mich denkt, es ist ein Referenztyp.

Ist das richtig?

Guid uid = new Guid();

Werden Guids auf dem Haufen gespeichert?

War es hilfreich?

Lösung

Sie können die Definition einer Richtlinie selbst sehen:

public struct Guid ...

Oder Sie können es so testen:

bool guidIsValueType = typeof(Guid).IsValueType;

Guids werden mit dem neuen Keyword erstellt, wodurch ich denken lässt, dass es sich um einen Referenztyp handelt.

Strukturen können zum Beispiel auch Konstruktoren haben new DateTime(2012, 12, 23).

Andere Tipps

GUID ist ein Werttyp.

Sehen Msdn. Beachten Sie, dass GUID a ist Struktur. Alle Strukturen sind Werttypen.

Guids werden mit dem neuen Keyword erstellt, wodurch ich denken lässt, dass es sich um einen Referenztyp handelt.

Hör auf, das zu denken. Werttypen können auch Konstruktoren haben. Es ist vollkommen legal, wenn auch seltsam zu sagen

int x = new int();

Das ist das gleiche wie das Zuweisen von Null zu x.

Ist das richtig?

Nö.

Werden Guid auf Haufen gelagert?

Ja. Richtlinien werden auch auf dem Stapel gespeichert.

Beachten Sie, dass in der folgenden Analyse die Implementierung der CLI der Microsoft "Desktop" oder "Silverlight" CLR auf Windows ist. Ich habe keine Ahnung, welche anderen Versionen der CLI, was sie auf Macs tun und so weiter. Wenn Sie wissen müssen, ob ein bestimmtes Stück Speicher in anderen Implementierungen auf dem Stapel gespeichert ist, müssen Sie jemanden fragen, der Experte für diese Implementierungen ist.

Unter den folgenden Umständen wird eine Richtlinie auf dem Stapel gespeichert:

(1) Wenn die GUID ein "vorübergehendes" Ergebnis einer laufenden Berechnung ist oder als Argument für eine Methode verwendet wird. Wenn Sie beispielsweise eine Methode haben, rufen Sie M (New Guid ()) an, der temporäre Speicher für die neue GUID wird auf dem Stapel zugewiesen.

(2) Wenn es sich bei der Richt um eine lokale Variable handelt, die (a) nicht in einem Iteratorblock ist, (b) keine geschlossene äußere Variable einer anonymen Methode oder einer Lambda-Expression.

In allen anderen Situationen wird die Richtlinie nicht auf dem Stapel gespeichert. Eine Richtlinie wird auf dem Haufen gespeichert, wenn es sich um ein Feld eines Referenztyps, eines Elements eines Arrays, eines geschlossenen lokalen Einheimischen einer anonymen Methode oder eines Lambda-Ausdrucks oder einem Lokal in einem Iteratorblock handelt.

Eine Richtlinie kann auch im GC -Haufen noch im Stapel gespeichert werden. Ein GUID könnte in vollständig nicht verwaltetem Speicher gespeichert werden, auf das über unsichere Zeigerarithmetik zugegriffen wird.

Ich bin neugierig, warum Sie sich so sehr interessieren, ob die Teile einer Richtlinie auf dem Stapel oder auf dem Haufen sind. Welchen Unterschied macht es?

Es ist eigentlich Guid. Alle Typen werden mit dem konstruiert new Stichwort. Sie können Referenztypen aus Werttypen identifizieren, indem sie a sind Klasse, Schnittstelle, oder delegieren (alle Referenztypen) oder a Struktur oder Auflauf (Werttypen).

Sein Werttyp siehe das folgende Beispiel:

using System;                   
public class Program
{
    public static void Main()
    {
        Guid a1 = new Guid();
        Console.WriteLine(a1);
        Guid b1 = a1;
        Console.WriteLine(b1);
        a1 = Guid.NewGuid();
        Console.WriteLine(a1);
        Console.WriteLine(b1);
    }
}

/* OUTPUT
00000000-0000-0000-0000-000000000000
00000000-0000-0000-0000-000000000000
164f599e-d42d-4d97-b390-387e8a80a328
00000000-0000-0000-0000-000000000000
*/
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top