Maison > développement back-end > C++ > Comment fonctionne la capture de variables dans les fermetures C# ?

Comment fonctionne la capture de variables dans les fermetures C# ?

Susan Sarandon
Libérer: 2025-01-12 21:16:44
original
991 Les gens l'ont consulté

How Does Variable Capture Work in C# Closures?

Explication détaillée de la capture de variables dans les fermetures C#

Présentation

La capture de variables est un aspect fondamental des fermetures C# qui permet à une fermeture d'accéder aux variables définies dans sa portée englobante. Cet article approfondit la capture de variables, répondant à des questions spécifiques sur son fonctionnement, la capture de type valeur par rapport à la capture de type référence et la boxe.

Comment les variables locales sont capturées

La capture de variable se produit lorsqu'une expression lambda ou une méthode anonyme accède à une variable locale dans sa portée englobante. Cependant, le mécanisme exact de capture n’est pas évident.

Pour comprendre cela, prenons un exemple simple :

<code class="language-csharp">Action action = () => { Console.WriteLine(counter); };
int counter = 5;</code>
Copier après la connexion

Dans cet exemple, l'expression lambda capture la variable counter dans sa portée englobante. Pour ce faire, le compilateur crée en fait une classe anonyme, appelée classe de fermeture, qui stocke une référence à la variable capturée. Lorsque l'expression lambda est exécutée, elle accède à la variable capturée via la classe de fermeture :

<code class="language-csharp">class ClosureClass
{
    private int counter;

    public ClosureClass(int counter)
    {
        this.counter = counter;
    }

    public void Execute()
    {
        Console.WriteLine(counter);
    }
}</code>
Copier après la connexion

Dans ce cas, la classe de fermeture stocke une référence à la variable counter et fournit une méthode pour y accéder.

Types de valeur et types de référence

Le type de la variable capturée détermine comment elle est stockée dans la classe de fermeture :

  • Type de valeur : La valeur elle-même est stockée dans la classe de fermeture. Aucune opération de boxing ou de unboxing n’est impliquée.
  • Type de référence : Les références aux objets sont stockées dans des classes de fermeture. Si l'objet est modifié ultérieurement, la référence capturée reflétera ces modifications.

Emballage

Aucune boxe n’est impliquée lors de la capture des types de valeur. La valeur capturée est stockée directement dans la classe de fermeture et la variable d'origine peut être modifiée sans affecter la valeur capturée.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal