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);
  }
}