CSharp 3
Apparence
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);
}
}
}
|