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
Linda Hamiltonoriginal
2025-01-06 01:57:39325parcourir

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 };

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; };

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:
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