C# methode
| Mode (FR) |
Mode (EN) |
Syntaxe |
Comportement |
Exemple |
| Par valeur |
By value |
void M(int x) |
Copie de la valeur, les modifications n’affectent pas l’argument original |
void M(int x){ x=5; } |
| Par référence |
By reference |
void M(ref int x) |
Passe une référence, les modifications affectent l’argument original |
void M(ref int x){ x=5; } |
| En sortie |
Out parameter |
void M(out int x) |
Doit être assigné dans la méthode, utile pour retourner plusieurs valeurs |
void M(out int x){ x=5; } |
| Paramètre optionnel |
Optional parameter |
void M(int x=10) |
Valeur par défaut si non fourni |
M(); // x=10 |
| Paramètre nommé |
Named parameter |
M(y:5, x:3) |
Permet de spécifier par nom, indépendamment de l’ordre |
void M(int x,int y) |
| Paramètre tableau |
Params array |
void M(params int[] values) |
Permet de passer un nombre variable d’arguments |
M(1,2,3,4); |
| Par pointeur (unsafe) |
Pointer parameter |
void M(int* p) |
Utilisé en mode unsafe, manipulation bas niveau |
unsafe void M(int* p){ *p=5; } |
Par valeur (défaut)
void Increment(int x)
{
x++;
}
int a = 5;
Increment(a);
Console.WriteLine(a); // 5 (inchangé)
Par référence - ref
void Increment(ref int x)
{
x++;
}
int a = 5;
Increment(ref a);
Console.WriteLine(a); // 6
Par référence - out
void Divide(int a, int b, out int quotient, out int remainder)
{
quotient = a / b;
remainder = a % b;
}
int r;
Divide(10, 3, out int q, out r);
Console.WriteLine($"q={q}, r={r}"); // q=3, r=1
Paramètres optionnels (valeurs par défaut)
void Greet(string name = "Invité")
{
Console.WriteLine($"Bonjour {name} !");
}
Greet(); // Bonjour Invité !
Greet("Jacques"); // Bonjour Jacques !
// Arguments nommés
void Display(string title, int width = 100, int height = 50)
{
Console.WriteLine($"{title} ({width}x{height})");
}
Display("Fenêtre", height: 200); // width=100 par défaut
Paramètres params (liste variable)
void PrintAll(params string[] items)
{
foreach (var item in items)
Console.WriteLine(item);
}
PrintAll("A", "B", "C"); // affiche A B C
Passage par référence avec in (C# 7.2+)
void ShowLength(in string text)
{
Console.WriteLine(text.Length);
}
string s = "Jacques";
ShowLength(in s); // lecture seule
Paramètres génériques
T Identity(T value)
{
return value;
}
int x = Identity(42); // T = int
string y = Identity("test"); // T = string
Paramètres avec this - méthodes d'extension
string phrase = "Bonjour Bonsoir";
Console.WriteLine(phrase.WordCount()); // 2
int a = 10;
Console.WriteLine(a.abs2());
var p = new Point { X = 3, Y = 4 };
Console.WriteLine("Method extension");
Console.WriteLine(p.DistanceToOrigin()); // 5
Console.WriteLine("\n");
public static class StringExtensions
{
public static int WordCount(this string s)
{
return s.Split(' ').Length;
}
public static int abs2(this int i)
{
return i + 1;
}
}
public class Point
{
public int X { get; set; }
public int Y { get; set; }
}
public static class PointExtensions
{
public static double DistanceToOrigin(this Point p)
{
return Math.Sqrt(p.X * p.X + p.Y * p.Y);
}
}