Quand utiliser ref en C# et quand cela n'est pas requis
En C#, passer des paramètres de type référence par valeur implique uniquement de transmettre la référence elle-même, pas une copie de l'objet. Ceci est similaire au passage de pointeurs par valeur en C ou C. Les modifications apportées aux valeurs des paramètres sont limitées à la fonction, tandis que les modifications apportées à l'objet sous-jacent sont propagées à l'appelant.
D'un autre côté, lorsque les paramètres sont passés par référence, toutes les modifications qui y sont apportées sont visibles par l'appelant car elles représentent des modifications apportées aux variables réelles.
Bien que cela puisse paraître déroutant au début, il est crucial de comprendre la différence entre la transmission par valeur et la transmission par référence. De manière générale, il est fortement recommandé d’éviter d’utiliser ref
/out
sauf en cas d’absolue nécessité. Ces mécanismes permettent en réalité de récupérer des valeurs de retour supplémentaires, et il est préférable de minimiser leur utilisation pour éviter que les méthodes ne deviennent trop complexes.
Dans le cas évoqué dans la question, received_s
ne nécessite pas l'argument ref
car aucune copie de l'objet n'est créée lorsque sa valeur est passée à la fonction. Cependant, remoteEP
nécessite ref
car la fonction a l'intention de changer sa valeur et de rendre la modification visible à l'appelant.
N'oubliez pas que les objets en C# sont essentiellement des pointeurs vers des objets réels. Lorsqu'un objet est transmis à une fonction, un pointeur est en fait transmis par lequel le contenu de l'objet peut être modifié. Vous ne devez utiliser ref
/out
que lorsque vous avez vraiment besoin d'échanger ou de créer un nouvel objet dans une fonction, ce qui revient à utiliser des pointeurs doubles.
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!