CSharp 3
De Banane Atomic
Aller à la navigationAller à la recherche
Initialiseur
Permet d’initialiser les propriétés public d'un objet sans écrire le constructeur correspondant.
public class MaClasse { private int _monChamps; // Ne peut être initialisé avec les initialiseurs public string MaPropriété { get; set; } public MaClasse(int monChamps) { _monChamps = monChamps; } } // Appel du constructeur et initialisation de la propriété MaPropriété MaClasse maClasse = new MaClasse(6) { MaPropriété = "MaPropriété" }; |
Inférence des types locaux : var
var ne peut être utilisé qu'avec des variables locales et non pas avec des paramètres ou des types de retour des méthodes.
var maClasse = new MaClasse(); var a = 3; // a sera de type int var b = "Salut !"; // b sera de type string var q = 52.8; // q sera un double var z = q / a; // z aussi sera un double var m = b.Length; // m sera un int var t = null; // Interdit, le type ne peut pas être inféré… |
Les types anonymes
Permet de créer une instance d’une classe qui n’a jamais été définie mais qui peut malgré tout posséder des propriétés.
// La classe est générée automatiquement // et est du type <>f__AnonymousType0`2[System.String,System.String] var truc = new { Propriété1 = "Propriété1", Propriété2 = "Propriété2" }; // truc2 est du même type que truc var truc2 = new { Propriété1 = "Propriété1", Propriété2 = "Propriété2" }; // truc3 est d'un type différent de truc var truc3 = new { Propriété2 = "Propriété2", Propriété1 = "Propriété1" }; |
Les expressions Lambda
Permet d'étendre l'écriture des méthodes anonymes.
static void Main(string[] args) { List<int> nombres = new List<int>() { 1, 2, 3, 4, 5 }; // Syntaxe C# 2.0 avec une méthode anonyme AfficheListe<int>(nombres, delegate(int nombre) { return (nombre % 2) == 0; }); // Syntaxe C# 3.0 avec une expression lambda AfficheListe<int>(nombres, nombre => (nombre % 2) == 0 ); } // Méthode prenant en argument un délégué de type Func<T, bool> public static void AfficheListe<T>(List<T> items, Func<T, bool> leFiltre) { foreach (T item in items) { if (leFiltre(item)) { Console.WriteLine(item); } } } |