| Value type | Reference type |
|---|---|
| Indeholder selve værdien. Ved almindelig tildeling kopieres værdien. int,
double, bool, char, decimal, struct,
enum, tuples. |
Indeholder en reference til et objekt. Ved almindelig tildeling kopieres referencen – ikke objektet. string, class, arrays, object,
interface, delegates, records. |
int a = 2;
int b = a; // værdien kopieres
b = 5; // a er stadig 2
string s1 = "Hej";
string s2 = s1; // referencen kopieres
| Begreb | Huske-model |
|---|---|
| Value type | Indeholder data direkte. |
| Reference type | Indeholder en reference; objektet allokeres på Managed Heap. |
| Lokale variable | Typisk på Stack – men placeringen er en implementationdetalje. |
| Objekter | Reference-type objekter allokeres på Managed Heap. |
| Stack | Metodekald og lokale data i den simple model. |
| Heap | Område som .NET-runtime og GC administrerer. |
string text; // reference uden objekt
text = null; // peger ikke på noget
text = "Hej"; // peger nu på et string-objekt
null, at referencen ikke peger på et objekt.free eller delete i C#.static void Test()
{
int a = 2;
double b = 3.14;
} // kaldets stack frame fjernes
Managed Heap er et hukommelsesområde, som .NET-runtime administrerer. Objekter kan flyttes af Garbage Collector, og heapen kan udvides efter behov.
Heap ≠ alle reference-variable. En reference-variabel indeholder referencen; objektet ligger på heapen. Et value type kan desuden ligge inde i et objekt på heapen.
int number = 42;
object boxed = number; // boxing
boxed
refererer til det.