En C #, l'objet de transmission à la méthode a toujours été un concept de base. On pense généralement que le type non original est passé par référence.
Cependant, une exception apparaît: lorsque l'objet System.Drawing.image est transmis à la méthode et que l'image est modifiée dans cette méthode, l'objet d'image d'origine reste inchangé après le retour de l'appel.
révéler la vérité: transmission de valeur et transfert de référence
Pour comprendre ce phénomène, nous devons clarifier la vraie nature de l'objet transmis par l'objet en C #. L'objet lui-même ne sera pas transmis; Pour le type de référence, cette valeur est une référence à l'objet réel, permettant des modifications à l'objet sous-jacent de la partie d'appel.
La différence subtile entre la transmission de valeur et le transfert de référence
Par défaut, C # utilise la "transmission de valeur" à tous les types (y compris les types de référence). Cela signifie que la copie de l'objet est passé comme valeur initiale du paramètre. Modifier la valeur du paramètre n'affecte pas l'objet d'origine. Pour modifier les valeurs d'attribut de l'objet à l'intérieur de la méthode, "Transfer de référence" peut être utilisé en spécifiant ou des mots clés REF dans l'instruction Paramètre. Dans ce cas, le paramètre fait efficacement référence à la même position de mémoire que le paramètre, et les modifications apportées aux paramètres seront visibles dans l'appel.
Exemple de code:
Conclusion Les concepts de «transmission de valeur» et de «transfert de référence» dans
C # sont différents de sa compréhension traditionnelle. En revanche, les valeurs du paramètre sont transmises, soit en tant que copie (type de valeur), soit comme référence (type de référence). Pour modifier la valeur d'attribut de l'objet à l'intérieur de la méthode, vous pouvez utiliser les mots clés Out ou Ref pour référence et passer.public void Foo(Image image) // 默认:值传递 { image = Image.FromStream(...); // 此更改调用方将看不到。 } public void Foo(ref Image image) // 引用传递 { image = Image.FromStream(...); // 此更改对调用方可见。 } public void Foo(Image image) // 对现有对象进行更改 { image.RotateFlip(...); // 此更改对调用方可见。 }
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!