Les méthodes d'extension

De Banane Atomic
Version datée du 16 janvier 2018 à 09:13 par Nicolas (discussion | contributions)
(diff) ← Version précédente | Voir la version actuelle (diff) | Version suivante → (diff)
Aller à la navigationAller à la recherche

Disponible à partir de C# 3, elles permettent d'ajouter des méthodes à une classe ou à une structure sans en modifier son code.

  • Les méthodes doivent être déclarées dans une classe static.
  • Les méthodes qui étendent une classe ou une structure ne peuvent accéder qu’aux membres publics.
Cs.svg
// Déclaration de la méthode d'extension dans une classe static
public static class StringExtensions
{
    /// <summary>
    /// A Contains method with a comparison type.
    /// </summary>
    public static bool Contains(this string source, string value, StringComparison comparisonType)
    {
        return source.IndexOf(value, comparisonType) >= 0;
    }
}

// Utilisation de la méthode d'extension : comparaison de string en ignorant la casse
var monString = "ASTRINGTOTEST";
monString.Contains("string", StringComparison.OrdinalIgnoreCase);

Avec les génériques

Cs.svg
public static class IListExtensions
{
    /// <summary>
    /// Un AddRange pour IList.
    /// </summary>
    public static void AddRange<T>(this IList<T> source, IEnumerable<T> items)
    {
        foreach (var item in items)
        {
            source.Add(item);
        }
    }
}

// Utilisation de la méthode d'extension :
var maListe = new List<string>();
maListe.AddRange(new string[] { "1", "2", "3" });;