Maison >développement back-end >C++ >Comment les fermetures C# accèdent-elles aux variables à partir de leurs méthodes parentes ?
Exploration des fermetures C# : accès aux variables à partir des méthodes englobantes
En programmation, une « fermeture » fait référence à une fonction qui conserve l'accès aux variables de sa portée environnante, même après que la fonction environnante a fini de s'exécuter. En C#, cela est souvent implémenté à l'aide de méthodes anonymes ou d'expressions lambda. La caractéristique clé est la capacité de la fermeture à « mémoriser » les variables de sa méthode parent.
Exemple illustratif en C# :
Considérez cet extrait de code :
<code class="language-csharp">public Person FindById(int id) { return this.Find(delegate(Person p) { return (p.Id == id); }); }</code>
Ici, le délégué anonyme au sein de FindById
accède à la variable id
déclarée dans la méthode FindById
. Cela démontre la capacité de la fermeture à capturer et à maintenir l'accès aux variables à partir de sa portée englobante.
Apprentissage complémentaire :
Pour une analyse plus approfondie des fermetures, consultez des ressources telles que les écrits de Martin Fowler et Jon Skeet sur le sujet. Ils offrent des explications détaillées et des exemples.
Exploiter la syntaxe C# 6 :
C# 6 a introduit une syntaxe plus concise pour les fermetures utilisant des expressions lambda :
<code class="language-csharp">public Person FindById(int id) { return this.Find(p => p.Id == id); }</code>
Cette expression lambda offre la même fonctionnalité que le délégué anonyme dans l'exemple précédent, mais avec une lisibilité améliorée.
Syntaxe concise équivalente :
L'exemple ci-dessus peut être encore simplifié en utilisant l'expression fléchée :
<code class="language-csharp">public Person FindById(int id) => this.Find(p => p.Id == id);</code>
Cela démontre une manière plus compacte de définir la fermeture en C#.
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!