Maison > développement back-end > C++ > Pourquoi les modifications d'un objet System.Drawing.image sont-elles passées à une méthode C # ne persistent pas toujours?

Pourquoi les modifications d'un objet System.Drawing.image sont-elles passées à une méthode C # ne persistent pas toujours?

Patricia Arquette
Libérer: 2025-01-31 00:51:08
original
991 Les gens l'ont consulté

Why Do Changes to a System.Drawing.Image Object Passed to a C# Method Not Always Persist?

Comprendre les références d'objets C # et l'anomalie System.Drawing.Image

Les mécanismes de passage des objets

C # provoquent souvent de la confusion. Bien que les types de référence permettent généralement aux modifications de méthode d'imposer l'objet d'origine, System.Drawing.Image présente une situation unique. Clarifions le comportement.

La nuance de l'objet passant

Il est crucial de comprendre que C # ne passe pas directement des objets; Il passe références aux objets. Pour les types de référence, cette référence est copiée par valeur. Cela signifie qu'une méthode reçoit une copie de la référence, pas l'objet lui-même.

System.Drawing.Image comportement

Lorsque vous passez un objet System.Drawing.Image à une méthode, toute modification que remplace L'objet entier (par exemple, l'attribution d'une nouvelle image) ne sera pas réfléchi en dehors de la méthode. En effet, la méthode fonctionne avec une copie de la référence. La réaffectation de la référence dans la méthode crée une nouvelle référence, laissant l'original inchangé.

Pass-by-Value vs pass-by-référence

Le comportement par défaut en C # est passant par valeur pour les types de valeur et les types de référence. Cependant, vous pouvez explicitement utiliser ref ou out Mots-clés pour forcer le pass-by-référence.

  • Pass-by-Value (par défaut): La méthode reçoit une copie de la référence (pour les types de référence) ou une copie de la valeur (pour les types de valeur). Les modifications apportées au paramètre dans la méthode n'affectent pas l'original.

  • Pass-by-Reference (ref / out): La méthode accède directement à l'objet ou à la variable d'origine. Les modifications sont visibles pour l'appelant.

Exemples de code illustratif:

<code class="language-csharp">public void ModifyImage(Image image) // Pass-by-Value
{
    // This reassigns the reference, NOT modifying the original.
    image = Image.FromFile("newImage.jpg"); 
}

public void ModifyImage(ref Image image) // Pass-by-Reference
{
    // This reassigns the reference, modifying the original.
    image = Image.FromFile("newImage.jpg");
}

public void ManipulateImage(Image image) // Pass-by-Value
{
    // This modifies the *contents* of the original image.
    image.RotateFlip(RotateFlipType.Rotate90FlipNone);
}</code>
Copier après la connexion

ModifyImage démontre la différence. La première version ne modifie pas l'image d'origine; le second fait. ManipulateImage, cependant, montre que la modification des propriétés de l'image (comme la rotation) affecte affecte l'original car il modifie l'état interne de l'objet, pas la référence elle-même. La distinction clé est entre le remplacement de l'objet entier par rapport à la modification de ses propriétés.

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