.NET Framework Types de référence utilisés


Exemple

Les types de référence comprennent à la fois une référence à une zone de mémoire et une valeur stockée dans cette zone.
Ceci est analogue aux pointeurs en C / C ++.

Tous les types de référence sont stockés sur ce que l'on appelle le tas .
Le tas est simplement une zone de mémoire gérée où les objets sont stockés. Lorsqu'un nouvel objet est instancié, une partie du tas sera allouée pour être utilisée par cet objet et une référence à cet emplacement du segment sera renvoyée. Le tas est géré et géré par le garbage collector et ne permet pas une intervention manuelle.

Outre l'espace mémoire requis pour l'instance elle-même, de l'espace supplémentaire est nécessaire pour stocker la référence elle-même, ainsi que des informations temporaires supplémentaires requises par le CLR .NET.

Le code ci-dessous illustre un type de référence affecté à une nouvelle variable. Dans ce cas, nous utilisons une classe, toutes les classes sont des types de référence (même si elles sont statiques).

Lorsqu'un type de référence est affecté à une autre variable, il s'agit de la référence à l'objet copié et non de la valeur elle-même. Ceci est une distinction importante entre les types de valeur et les types de référence.

Cela implique que nous avons maintenant deux références au même objet.
Toute modification des valeurs dans cet objet sera reflétée par les deux variables.

class PersonAsReferenceType
{
    public string Name;
}

class Program
{
    static void Main()
    {
        PersonAsReferenceType personA;

        personA = new PersonAsReferenceType { Name = "Bob" };

        var personB = personA;

        personA.Name = "Linda";

        Console.WriteLine(               // Outputs 'True' - because
            object.ReferenceEquals(      // personA and personB are referencing 
                personA,                 // the *same* memory location
                personB));

        Console.WriteLine(personA.Name); // Outputs 'Linda'
        Console.WriteLine(personB.Name); // Outputs 'Linda'
    }