Objets ne sont pas passés du tout. Par défaut, l'argument est évalué et son valeur est passé, par valeur, comme valeur initiale du paramètre de la méthode que vous appelez. Le point important est que la valeur est une référence pour les types de référence - un moyen d'accéder à un objet (ou null). Les modifications apportées à cet objet seront visibles pour l'appelant. Cependant, si vous changez la valeur du paramètre pour vous référer à un objet différent, vous pourrez pas être visible lorsque vous utilisez la méthode de pass by value, qui est la méthode par défaut de l'option todos types.
Si vous voulez utiliser la méthode pass-by-reference, il faut debe utiliser out
o ref
si le type de paramètre est un type de valeur ou un type de référence. Dans ce cas, la variable elle-même est effectivement transmise par référence, de sorte que le paramètre utilise le même emplacement de stockage que l'argument - et les modifications du paramètre lui-même sont vues par l'appelant.
Donc :
public void Foo(Image image)
{
// This change won't be seen by the caller: it's changing the value
// of the parameter.
image = Image.FromStream(...);
}
public void Foo(ref Image image)
{
// This change *will* be seen by the caller: it's changing the value
// of the parameter, but we're using pass by reference
image = Image.FromStream(...);
}
public void Foo(Image image)
{
// This change *will* be seen by the caller: it's changing the data
// within the object that the parameter value refers to.
image.RotateFlip(...);
}
J'ai un article qui donne beaucoup plus de détails sur ce sujet. . Fondamentalement, "passer par référence" ne signifie pas ce que vous pensez qu'il signifie.
29 votes
Toutes les variables sont transmises par valeur par défaut en C#. Vous passez la valeur de la référence dans le cas des types de référence.
0 votes
C'est la même chose : pourquoi-une-liste-qui-est-passée-sans-ref à une-fonction-agissant-comme-passée-avec-ref
0 votes
Comme aucun code n'a été donné, la question n'est pas vraiment claire. Peut-être que le PO voulait dire
image.Load(filename)
ou peut-être qu'ils voulaient direimage = Image.Load(filename)
dondeimage
est le paramètre de la fonction.