C # Transfert de paramètres: la discussion in-thepth de la transmission de valeur et du transfert de référence
Dans C #, la transmission de valeur et le transfert de référence sont les concepts de base que les programmeurs doivent avoir. Bien que les types non originaux soient généralement considérés comme transmis, la situation n'est pas toujours le cas pour certains objets non originaux (tels que System.Drawing.image).
Lorsque vous passez l'objet System.Drawing.image à la méthode et en chargeant des images, nous nous attendons généralement à ce que l'objet d'origine reflète ces modifications après le retour. Cependant, ce n'est pas le cas pour System.Drawing.image. Les modifications apportées dans la méthode d'appel ne diffuseront pas le receveur de récupération, ce qui entraînera une confusion.
La vérité de la "transmission de référence"
Ce malentendu vient de malentendus sur le sens de la référence. En C #, l'objet lui-même ne sera pas transmis. Inversement, leurs valeurs sont transmises sur la valeur du paramètre initial. Pour le type de référence, ces valeurs sont des références à l'objet lui-même. Par conséquent, toutes les modifications apportées par l'objet lui-même dans la méthode d'appel seront visibles pour la partie d'appel. Mais ce qui est important, c'est de noter que la valeur du paramètre lui-même (c'est-à-dire la référence à l'objet) n'est pas transmise en fonction de la référence. Cela signifie que si les paramètres reçoivent une nouvelle valeur et citent un objet différent, la partie d'appel ne verra pas ce changement.
Solution: exprimant le transfert de référence
Afin de s'assurer que la partie d'appel elle-même est visible, l'appel doit être passé. Que le paramètre soit le type de valeur ou le type de référence, cela peut être implémenté par les modificateurs
ou .
En utilisant ces modificateurs, les paramètres sont réellement passés en fonction de la référence, et les modifications qu'il apportent dans la méthode se refléteront dans l'appel.
out
Exemple ref
Afin d'expliquer ce concept, veuillez considérer l'exemple suivant:
Dans le premier exemple, le paramètre est passé par valeur, et les modifications du paramètre lui-même ne sont pas visibles pour la partie d'appel. Dans le deuxième exemple, la formule du modificateur est affichée en fonction du paramètre de référence, qui est visible par le paramètre lui-même. Dans le troisième exemple, les paramètres sont passés par référence, mais les modifications de l'objet lui-même sont visibles, car la valeur du paramètre est une référence à l'objet.
Conclusion
<code class="language-csharp">public void Foo(Image image) { // 此更改对调用方不可见。 image = Image.FromStream(...); } public void Foo(ref Image image) { // 此更改对调用方可见。 image = Image.FromStream(...); } public void Foo(Image image) { // 此更改对调用方可见。 image.RotateFlip(...); }</code>
C # Le transfert de référence est un concept subtil, et son comportement n'est pas toujours comme prévu par notre intuition. Comprendre la différence entre l'objet de transmission et la valeur de transmission de référence est essentiel pour le code qui s'exécute comme prévu. ref
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!