Passage d’arguments en paramètres

Il existe 4 façons possibles de passer des arguments en paramètre d’une méthode. Un paramètre peut être passé par référence ou par valeur, indépendamment du type de paramètre (référence ou valeur). Selon le mot-clé précédant le paramètre (aucun, ref, in ou out), on choisit la façon de passer un argument en paramètre d’une méthode :

  • Aucun : par valeur, Par défaut. Une copie de la valeur est créée lors de l’appel avec argument, et l’argument passé par la méthode appelante ne pourra pas être modifié par la méthode appelée.
  • ref : par référence. Si l’objet est modifié dans la méthode appelée, l’argument passé par la méthode appelante sera modifié également.
  • in : par référence, en lecture seule. C’est bien la référence de l’objet qui est transmise, mais l’objet ne pourra pas être modifié par la méthode appelée. Cela permet de passer un objet de type référence de grande taille, sans altérer les performances du programme, à la différence du passage par valeur, car aucune copie de l’objet ne sera faite avant de le transmettre.
  • out : par référence, la méthode appelée devra obligatoirement affecter le paramètre, de sorte que la méthode appelante puisse s’attendre à obtenir un résultat en appelant cette méthode

A noter : si un mot-clé est utilisé, il doit être placé avant le paramètre dans le prototype de la méthode, mais également avant l’argument lors de l’appel.

Modificateur params

En faisant précéder le dernier paramètre d’une méthode du modificateur params, la méthode acceptera un nombre variable d’arguments d’un type particulier. Par exemple, la méthode suivante de calcul de moyenne acceptera n’importe quel nombre d’entiers en paramètre :

static int Moyenne(params int[] nombres)
{
    float somme = 0;
    foreach (int i in nombres)
    {
        somme += i;
    }
    return (int)(somme / nombres.Length);
}

Et pourra être appelée comme ceci :

var moyenne = Moyenne(6, 5, 7, 5);