Interfaces génériques dans .NET
Cet article donne une vue d'ensemble des interfaces génériques /NET qui fournissent des fonctionnalités communes à plusieurs familles de types génériques.
Les interfaces génériques fournissent des contreparties de type sécurisé aux interfaces non génériques pour les comparaisons de classement et d’égalité, et pour les fonctionnalités partagées par les types de collections génériques. .NET 7 introduit des interfaces génériques pour les types de type nombre, par exemple System.Numerics.INumber<TSelf>. Ces interfaces vous permettent de définir des méthodes génériques qui fournissent des fonctionnalités mathématiques, où le paramètre de type générique est contraint d’être un type qui implémente une interface générique et numérique.
Notes
Les paramètres de type de plusieurs interfaces génériques sont marqués comme étant covariants ou contravariants, en fournissant une plus grande flexibilité pour l’affectation et l’utilisation des types qui implémentent ces interfaces. Pour plus d’informations, consultez Covariance et contravariance.
Comparaisons d’égalité et de classement
Dans l'espace de noms System, les interfaces génériques System.IComparable<T> et System.IEquatable<T>, comme leurs contreparties non génériques, définissent respectivement des méthodes pour les comparaisons de classement et les comparaisons d'égalité. Les types implémentent ces interfaces pour offrir la capacité à réaliser de telles comparaisons.
Dans l’espace de noms System.Collections.Generic, les interfaces génériques IComparer<T> et IEqualityComparer<T> offrent un moyen de définir une comparaison de classement ou d’égalité pour les types qui n’implémentent pas l’interface System.IComparable<T> ou System.IEquatable<T>. Elles permettent également de redéfinir ces relations pour les types qui le font.
Ces interfaces sont utilisées par les méthodes et les constructeurs de nombreuses classes de collection génériques. Par exemple, vous pouvez passer un objet IComparer<T> générique au constructeur de la classe SortedDictionary<TKey,TValue> pour spécifier un ordre de tri pour un type qui n'implémente pas l'interface générique System.IComparable<T>. Il existe des surcharges de la méthode statique générique Array.Sort et de la méthode d'instance List<T>.Sort pour le tri des tableaux et des listes à l'aide d'implémentations génériques de IComparer<T>.
Les classes génériques Comparer<T> et EqualityComparer<T> fournissent des classes de base pour les implémentations des interfaces génériques IComparer<T> et IEqualityComparer<T>, et fournissent également des comparaisons de classement et d’égalité par défaut via leurs propriétés respectives Comparer<T>.Default et EqualityComparer<T>.Default.
Fonctionnalités des collections
L'interface générique ICollection<T> est l'interface de base pour les types de collections génériques. Elle offre des fonctionnalités de base pour l'ajout, la suppression, la copie et l'énumération d'éléments. ICollection<T> hérite à la fois de l'interface générique IEnumerable<T> et de l'interface non générique IEnumerable.
L'interface générique IList<T> étend l'interface générique ICollection<T> avec des méthodes pour la récupération indexée.
L'interface générique IDictionary<TKey,TValue> étend l'interface générique ICollection<T> avec des méthodes pour la récupération indexée. Les types de dictionnaires génériques de la bibliothèque de classes de base du .NET implémentent également l’interface IDictionary non générique.
L'interface générique IEnumerable<T> fournit une structure d'énumérateur générique. L'interface générique IEnumerator<T> implémentée par les énumérateurs génériques hérite de l'interface non générique IEnumerator ; les membres MoveNext et Reset, qui ne dépendent pas du paramètre de type
T
, apparaissent seulement sur l'interface non générique. Cela signifie que tout consommateur de l'interface non générique peut également consommer l'interface générique.
Fonctionnalités mathématiques
.NET 7 introduit des interfaces génériques dans l’espace de noms System.Numerics qui décrivent les types de type numéro et les fonctionnalités disponibles. Les 20 types numériques que la bibliothèque de classes de base .NET fournit, par exemple Int32 et Double, ont été mis à jour pour implémenter ces interfaces. La plus importante de ces interfaces est INumber<TSelf>, ce qui correspond approximativement à un nombre « réel ».
Pour plus d’informations sur ces interfaces, consultez les Mathématiques génériques.