Définir des méthodes d’extension
Écrivez des méthodes statiques avec le modificateur this.
Définir des méthodes d’extension est une leçon C# Academy gratuite sur CoddyKit. Ceci est la leçon 1 sur 4. Tu peux lire la leçon complète ci-dessous gratuitement — puis la pratiquer en direct dans le navigateur avec un éditeur de code intégré et un tuteur IA 24/7. Elle fait partie du parcours d'apprentissage C# Academy, et ta progression se synchronise sur le web et l'application CoddyKit. Le cours C# Academy comprend 4 leçons au total.
Qu’est-ce qu’une méthode d’extension ?
Une méthode d’extension vous permet d’ajouter de nouvelles méthodes à un type existant sans le modifier ni créer un type dérivé. Vous l’appelez comme s’il s’agissait d’une méthode d’instance, mais il s’agit en réalité d’une méthode static particulière.
Les extensions sont idéales lorsque vous ne possédez pas le code source d’un type (comme string ou int), mais que vous souhaitez lui ajouter un nouveau comportement pratique.
Les trois conditions requises
Pour déclarer une méthode d’extension, vous avez besoin d’une classe statique, d’une méthode statique et d’un premier paramètre marqué par le mot-clé this. Le paramètre this indique le type que vous étendez.
using System;
public static class StringExtensions
{
public static int WordCount(this string text)
{
if (string.IsNullOrWhiteSpace(text)) return 0;
return text.Split(new[] { ' ' }, StringSplitOptions.RemoveEmptyEntries).Length;
}
}
public class Program
{
public static void Main()
{
string sentence = "the quick brown fox";
Console.WriteLine(sentence.WordCount());
}
}L’appeler comme une méthode d’instance
Bien que WordCount soit statique, vous l’appelez avec sentence.WordCount(). En arrière-plan, le compilateur réécrit cet appel sous la forme StringExtensions.WordCount(sentence).
using System;
using System.Linq;
public static class StringExtensions
{
public static string Repeat(this string text, int times)
{
return string.Concat(Enumerable.Repeat(text, times));
}
}
public class Program
{
public static void Main()
{
// These two lines do exactly the same thing
Console.WriteLine("ab".Repeat(3));
Console.WriteLine(StringExtensions.Repeat("ab", 3));
}
}Le paramètre this reçoit l’instance
La valeur située à gauche du point devient le paramètre this. Vous pouvez ajouter d’autres paramètres après celui-ci, que les appelants transmettent normalement.
using System;
public static class IntExtensions
{
public static bool IsBetween(this int value, int low, int high)
{
return value >= low && value <= high;
}
}
public class Program
{
public static void Main()
{
int age = 25;
Console.WriteLine(age.IsBetween(18, 65));
Console.WriteLine(10.IsBetween(1, 5));
}
}Étendre vos propres types
Les extensions ne servent pas uniquement aux types de bibliothèques. Vous pouvez également étendre vos propres classes, ce qui est pratique pour conserver un type central épuré tout en ajoutant des comportements auxiliaires ailleurs.
using System;
public class Money
{
public decimal Amount { get; }
public Money(decimal amount) { Amount = amount; }
}
public static class MoneyExtensions
{
public static string ToUsd(this Money m) => "$" + m.Amount.ToString("0.00");
}
public class Program
{
public static void Main()
{
var price = new Money(19.5m);
Console.WriteLine(price.ToUsd());
}
}Les extensions ne peuvent pas accéder aux membres privés
Une méthode d’extension est simplement une méthode statique située dans une autre classe ; elle ne peut donc utiliser que l’interface publique (ou interne, lorsqu’elle se trouve dans le même assemblage) du type. Elle ne peut pas accéder aux champs privés.
using System;
public class Counter
{
private int _count;
public int Value => _count;
public void Increment() => _count++;
}
public static class CounterExtensions
{
// Can only use public members like Value and Increment
public static bool IsZero(this Counter c) => c.Value == 0;
}
public class Program
{
public static void Main()
{
var c = new Counter();
Console.WriteLine(c.IsZero());
c.Increment();
Console.WriteLine(c.IsZero());
}
}Enchaîner les méthodes d’extension
Comme chaque extension renvoie une valeur, vous pouvez les enchaîner dans une chaîne de traitement fluide. Cette écriture se lit de haut en bas et correspond au style utilisé par LINQ.
using System;
public static class TextExtensions
{
public static string Shout(this string s) => s.ToUpper();
public static string Bang(this string s) => s + "!";
}
public class Program
{
public static void Main()
{
string result = "hello".Shout().Bang();
Console.WriteLine(result);
}
}Valeur null et méthodes d’extension
Contrairement à un véritable appel d’instance, une méthode d’extension peut s’exécuter même lorsque le récepteur vaut null, car aucun déréférencement n’a lieu tant que votre code n’y accède pas. Vous pouvez ainsi écrire des fonctions auxiliaires sûres vis-à-vis des valeurs nulles.
using System;
public static class StringExtensions
{
public static bool IsBlank(this string text)
{
// text may be null here, and that is fine
return string.IsNullOrWhiteSpace(text);
}
}
public class Program
{
public static void Main()
{
string nothing = null;
Console.WriteLine(nothing.IsBlank());
Console.WriteLine("x".IsBlank());
}
}Les méthodes d’instance sont prioritaires sur les extensions
Si une véritable méthode d’instance possède une signature correspondante, le compilateur la préfère toujours à une méthode d’extension. Les extensions ne comblent que les lacunes du type.
using System;
public static class Ext
{
// This will be ignored because string already has ToString()
public static string ToString(this string s, int n) => s + n;
}
public class Program
{
public static void Main()
{
// Resolves to the built-in instance ToString(), not the extension
Console.WriteLine("value: " + "abc".ToString());
}
}Une bibliothèque pratique de fonctions auxiliaires
Regrouper des extensions associées dans une seule classe statique permet de créer une bibliothèque d’outils bien organisée. Voici une petite classe d’outils numériques que vous pourriez réutiliser dans un projet.
using System;
public static class NumberExtensions
{
public static bool IsEven(this int n) => n % 2 == 0;
public static int Squared(this int n) => n * n;
public static double Percent(this int n) => n / 100.0;
}
public class Program
{
public static void Main()
{
Console.WriteLine(4.IsEven());
Console.WriteLine(5.Squared());
Console.WriteLine(50.Percent());
}
}À vous de jouer
Mettez en pratique ce que vous avez appris : une classe statique avec plusieurs extensions ciblées, appelées de manière fluide. C’est exactement ainsi que sont conçues les bibliothèques d’outils utilisées au quotidien.
using System;
public static class StringExtensions
{
public static string Capitalize(this string s)
=> string.IsNullOrEmpty(s) ? s : char.ToUpper(s[0]) + s.Substring(1);
public static string Surround(this string s, char c) => c + s + c;
}
public class Program
{
public static void Main()
{
Console.WriteLine("hello".Capitalize().Surround('*'));
}
}Vérification rapide
Vérifiez votre compréhension de la déclaration d’une méthode d’extension.
Récapitulatif
Vous avez appris qu’une méthode d’extension est une méthode static située dans une classe static, dont le premier paramètre utilise this. Elle est appelée avec une syntaxe d’instance, mais compilée en un appel statique normal.
- Trois conditions : une classe statique, une méthode statique et un premier paramètre
this. - Seuls les membres publics sont accessibles.
- Les méthodes d’instance sont toujours prioritaires.
- Les extensions peuvent être enchaînées et même s’exécuter sur des récepteurs
null.
Questions Fréquemment Posées
La leçon « Définir des méthodes d’extension » est-elle gratuite ?
Oui — le texte complet de « Définir des méthodes d’extension » est gratuit à lire ici sur le web. Pour la pratiquer de manière interactive (un éditeur de code intégré et un tuteur IA 24/7) et déverrouiller le reste du cours C# Academy, passe à CoddyKit PRO. Le cours C# Academy comprend 4 leçons au total.
Qu'est-ce que j'apprendrai dans « Définir des méthodes d’extension » ?
Écrivez des méthodes statiques avec le modificateur this. Tu pratiques C# Academy avec du code pratique que tu exécutes directement dans le navigateur, et un tuteur IA 24/7 répond à tes questions au fur et à mesure que tu avances dans la leçon.
Dois-je avoir de l'expérience pour commencer C# Academy ?
Aucune expérience préalable n'est requise. C# Academy sur CoddyKit est structuré pour les débutants jusqu'aux apprenants avancés, donc tu peux commencer ici ou depuis le début et avancer à ton rythme. Ceci est la leçon 1 sur 4.
Combien de temps prend la leçon « Définir des méthodes d’extension » ?
La plupart des leçons CoddyKit prennent environ 5–10 minutes. Chacune est courte et interactive, tu progresses régulièrement et tu repiques exactement où tu t'es arrêté sur le web et l'app.
Peux-tu écrire et exécuter du code dans cette leçon C# Academy ?
Oui. Chaque leçon C# Academy inclut un éditeur de code intégré, tu écris et exécutes du vrai code directement dans ton navigateur et tu reçois des retours IA instantanés — aucune configuration locale requise.
Toutes les leçons de ce cours
- Définir des méthodes d’extension
- Étendre les interfaces et les génériques
- Résolution des méthodes d’extension
- Concevoir de bonnes extensions