Maison >développement back-end >C++ >Pourquoi les champs de classe C# ne peuvent-ils pas être attribués par référence et comment contourner ce problème ?
Conserver les références lors de l'affectation à un champ
En C#, l'affectation par "référence" à un champ de classe n'est pas possible. En effet, les champs ne peuvent pas être de type référence. Il y a trois raisons principales à cela :
Raisons de la restriction :
Solution de contournement :
Malgré la restriction, il existe une solution de contournement pour simuler comportement de type référence :
Utiliser un délégué et Action :
Créez un délégué avec un getter et un setter pour la valeur souhaitée. Stockez ce délégué dans un champ au lieu d'une réf. Par exemple :
sealed class Ref<T> { private readonly Func<T> getter; private readonly Action<T> setter; public Ref(Func<T> getter, Action<T> setter) { this.getter = getter; this.setter = setter; } public T Value { get { return getter(); } set { setter(value); } } } ... Ref<int> x; void M() { int y = 123; x = new Ref<int>(() => y, z => { y = z; }); x.Value = 456; Console.WriteLine(y); // 456 }
Dans ce cas, x stocke un délégué qui peut obtenir et définir la valeur de y. Lorsque vous définissez x.Value, cela modifie y.
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!