È Guid considerato un tipo di valore o tipo di riferimento?
-
23-09-2019 - |
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?
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 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?
E 'un tipo di valore.
http://msdn.microsoft.com/en-us/ biblioteca / system.guid.aspx
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
*/