Domanda

GUID vengono creati utilizzando la parola chiave new che mi fa pensare che sia un tipo di riferimento.

È corretto?

Guid uid = new Guid();

Sono GUID memorizzati sul mucchio?

È stato utile?

Soluzione

Si può vedere la definizione di un Guid te stesso:

public struct Guid ...

In alternativa, è possibile verificare in questo modo:

bool guidIsValueType = typeof(Guid).IsValueType;
  

GUID vengono creati utilizzando la nuova   parola chiave che mi fa pensare che sia un   tipo di riferimento.

Structs può avere costruttori troppo, per esempio new DateTime(2012, 12, 23).

Altri suggerimenti

GUID è un tipo di valore.

MSDN . Si noti che GUID è un struct . Tutte le strutture sono .

  

GUID vengono creati utilizzando la nuova parola chiave che mi fa pensare che sia un tipo di riferimento.

smettere di pensare che. I tipi di valore possono avere costruttori troppo. E 'perfettamente legale, anche se strano, a dire

int x = new int();

Questo è lo stesso che l'assegnazione di zero a x.

  

È corretto?

No.

  

Sono di GUID memorizzati sul mucchio?

Sì. GUID vengono memorizzati anche in pila.

Si noti che l'analisi che segue presuppone che l'attuazione del CLI è il "desktop" di Microsoft o "Silverlight" CLR in esecuzione su Windows. Non ho idea di quello che le altre versioni del CLI fanno, quello che fanno su Mac, e così via. Se avete bisogno di sapere se un particolare pezzo di memoria viene memorizzato sullo stack in altre implementazioni, dovrete chiedere a qualcuno che è un esperto di queste implementazioni.

Un GUID è memorizzato nello stack nelle seguenti circostanze:

(1) quando il GUID è un risultato "temporaneo" di un calcolo in corso o è utilizzata come argomento a un metodo. Ad esempio, se si dispone di una chiamata di metodo M (nuova Guid ()) di memorizzazione temporanea quindi per il nuovo GUID viene allocato sullo stack.

(2) quando il GUID è una variabile locale che è (a) non in un blocco iteratore, (b) non chiuso-over variabile esterna di un metodo o lambda espressione anonima.

In tutte le altre situazioni il Guid non viene memorizzato in pila. Un GUID è memorizzato sul mucchio quando è un campo di un tipo di riferimento, un elemento di una matrice, un chiuso-over locale di un metodo o lambda espressione anonima, o un locale in un blocco iteratore.

GUID può anche essere memorizzato in nessuno mucchio GC né la pila. Un Guid potrebbe essere memorizzato nella memoria non gestita del tutto, si accede tramite pericoloso aritmetica dei puntatori.

Sono curioso di sapere perché ci tieni così tanto sul fatto che i bit di un guid sono in pila o sul mucchio. Che differenza fa?

In realtà è Guid . Tutti i tipi sono costruiti utilizzando la parola chiave new. È possibile identificare i tipi di riferimento di tipi di valore per se sono un classe , interfaccia , o delegato (tutti i tipi di riferimento), o un struct o enum (i tipi di valore).

Il suo tipo di valore, vedere l'esempio di seguito:

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
*/
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top