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.

Csharp.svg
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.

Csharp.svg
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.

Csharp.svg
// 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.

Csharp.svg
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);
        }
    }
}

Les méthodes d'extension

LINQ