Maison > développement back-end > C++ > Comment puis-je conserver des références lors de l'attribution de valeurs aux champs de classe en C# ?

Comment puis-je conserver des références lors de l'attribution de valeurs aux champs de classe en C# ?

Linda Hamilton
Libérer: 2025-01-06 01:57:39
original
339 Les gens l'ont consulté

How Can I Maintain References When Assigning Values to Class Fields in C#?

Conservation des références dans les affectations de champs de classe en C#

Lorsque vous tentez d'attribuer une valeur par référence à un champ de classe, un comportement inattendu peut se produire. Dans l'exemple fourni, l'attribution d'un "paramètre ref" à un champ entraînait une perte de référence.

Comprendre la restriction

C# restreint la déclaration des champs comme références à variables. Cela est dû aux conséquences potentielles :

  1. Autoriser les champs ref pourrait conduire à des situations dangereuses dans lesquelles le stockage de la variable référencée est inaccessible une fois la variable hors de portée.
  2. Pour conserver les références dans les champs, le CLR devrait allouer de la mémoire pour les variables locales sur le tas récupéré, ce qui aurait un impact optimisation.

Surmonter la limitation

Bien qu'un véritable champ de référence ne soit pas possible, il existe des alternatives :

Option 1 : Créer une classe Wrapper

Vous pouvez créer une classe wrapper qui contient la valeur référencée en tant que propriété. La classe peut fournir des méthodes pour obtenir et définir la valeur, en préservant efficacement la référence.

public class Wrapper
{
    public int Value { get; set; }
}
...
Wrapper wrapper = new Wrapper { Value = 123 };
Copier après la connexion

Option 2 : Utiliser des expressions Lambda

Vous pouvez utiliser des expressions lambda pour définir un getter et un setter pour une variable référencée. Cela attribue une référence à la variable via un délégué.

public delegate int Getter();
public delegate void Setter(int value);
...
Getter getter = () => y;
Setter setter = z => { y = z; };
Copier après la connexion

Conclusion

En comprenant les raisons derrière la restriction du champ ref et en utilisant des techniques alternatives telles que les classes wrapper ou des expressions lambda, il est possible d'obtenir un comportement de type référence dans les affectations de champs de classe 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!

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