# Programmation C sharp/Les fonctions

Une fonction étant toujours déclarée dans une classe, elles sont plutôt appelées « méthodes ».

## Déclarer une méthode

Une méthode possède un nom, une liste de paramètres, et un type de retour.
La syntaxe de déclaration est la suivante :
Où accès est optionnel et définit le mode d'accès (public, privé ou protégé), le type de méthode (statique ou d'instance). Voir le chapitre sur les classes.
type_retour spécifie le type de la valeur retournée par la fonction. Ce type peut être void (vide) pour indiquer que la fonction ne retourne aucune valeur.
La fonction retourne une valeur en utilisant le mot clé return. L'instruction return interrompt l'exécution de la fonction, retourne la valeur de l'expression qui suit, et l'exécution du code ayant appelé la fonction se poursuit.
La syntaxe est :
Si la fonction ne retourne rien, l'instruction return n'est pas obligatoire, mais si elle est utilisée, aucune expression ne doit être spécifiée. Si la fonction ne retourne rien on appellera cette fonction une procédure.
Exemple :

## Appeler une méthode

L'appel à une méthode se fait en spécifiant son nom, suivi des arguments entre parenthèses :
Si la fonction retourne une valeur, l'appel à celle-ci peut être utilisé dans une expression.
Exemple :
Dans cet exemple, la méthode appelée est nommée Concatener car située dans la même classe que l'appel. Cependant, toute méthode s'applique à un objet. Celui-ci doit être spécifié avant le nom de la fonction, et séparé par le caractère point ( . ). Par défaut, il s'agit de l'objet this (objet courant).

## Passage de paramètres à une méthode

Les paramètres passés à une méthode peuvent être passés de trois manière différentes :
* un paramètre en lecture seule (transmission d'information) : passage par valeur,
* un paramètre référençant une variable pour y mettre une valeur de retour : paramètre out,
* un paramètre référençant une variable pour transmettre une information et y mettre une valeur de retour : paramètre ref.
Le choix dépend grandement de la taille et de la portée de la variable à transmettre, car le passage par valeur ou par référence n'a pas le même impact en performances.

### Passage par valeur

Il s'agit d'un paramètre servant à transmettre une information à la méthode appelée, comme dans les exemples précédents. Si la méthode modifie sa valeur, la modification est locale à la fonction uniquement. Un paramètre normal n'est précédé d'aucun mot-clé particulier.
Exemple :
Ce programme affiche :

### Paramètre out

Un paramètre out ne sert à la fonction qu'à retourner une valeur. L'argument transmis doit référencer une variable ou un élément de tableau. Ce paramètre est précédé du mot-clé out à la fois lors de sa déclaration, et lors de l'appel à la méthode.
La variable référencée n'a pas besoin d'être initialisée auparavant. La fonction doit obligatoirement affecter une valeur à la variable référencée.
Exemple :
Ce programme affiche :

### Paramètre ref

Un paramètre ref est une combinaison des deux types de paramètres précédents. L'argument transmis doit référencer une variable ou un élément de tableau qui doit être initialisé auparavant. Ce paramètre est précédé du mot-clé ref à la fois lors de sa déclaration, et lors de l'appel à la méthode. La méthode n'est pas obligée de modifier la valeur contenue dans la variable référencée.
Exemple :
Ce programme affiche :

#### C# 4.0 Méthode COM : ref optionnel

L'appel à une méthode d'interface COM utilisant un paramètre ref peut ne pas utiliser explicitement de variable.
Exemple :
La méthode COM suivante :
Peut être appelée sans le mot clé ref :
Ce qui est équivalent à :
Un paramètre ref est en général modifié par la méthode appelée. Ne pas utilier le mot clé ref lors de l'appel signifie que la nouvelle valeur retournée par la méthode est ignorée.

### Nombre variable de paramètres

Une méthode peut posséder un nombre variable de paramètres, comme, par exemple, la méthode statique Format de la classe String :
Ce genre de méthode possède un nombre de paramètres obligatoires, comme une méthode normale, suivis d'un nombre variable de paramètres (voire aucun). Ces paramètres en nombre variable sont en fait transmis sous la forme d'un tableau .
Une telle méthode utilise le mot clé params pour le dernier paramètre qui doit être un tableau (à une seule dimension). Les arguments transmis ainsi, peuvent être variables en nombres mais aussi en type.
Exemples de méthodes :
Pour le paramètre marqué params, il est possible de transmettre soit une liste d'argument, soit un tableau contenant ces arguments.
Exemples d'appels :

### C# 4.0 Paramètres optionnels

Les paramètres peuvent être optionnels lors de l'appel à la méthode lorsque ceux-ci sont définis avec une valeur par défaut.
Exemple :
Cette méthode peut être appelée de différentes façons :
Cependant, l'appel suivant ne compile pas :
La solution est d'utiliser les paramètres nommés.

### C# 4.0 Paramètres nommés

Lors de l'appel à une méthode, les paramètres peuvent être nommés afin de pouvoir les passer dans un ordre quelconque et permettre également de ne pas fournir certains paramètres optionnels.
La méthode afficher de l'exemple de la section précédente peut donc être appelée de cette façon :
Notez la syntaxe avec deux-points afin de spécifier la valeur d’un argument, nomduparametre: valeur.

## Surcharge de méthode

Une méthode peut être surchargée (overload en anglais), c'est à dire qu'il peut exister au sein de la même classe plusieurs méthodes portant le même nom, à condition qu'elles soient différenciables par leur signature. La signature d'une méthode correspond aux types et nombre de paramètres acceptés par celle-ci.
Exemple :
Le compilateur détermine la méthode à appeler en fonction du type des arguments passés à la méthode.
Exemple :
Le type de retour ne fait pas partie de la signature, car la valeur retournée par une méthode appelée peut être ignorée. Si deux méthodes portent le même nom et ont la même signature, le compilateur génère une erreur.
Exemple :
Les deux méthodes ont la même signature.