Interfaces genéricas no .NET
Este artigo fornece uma visão geral do . Interfaces genéricas da NET que fornecem funcionalidade comum entre famílias de tipos genéricos.
As interfaces genéricas fornecem contrapartidas seguras para tipos para interfaces não genéricas para comparações de ordenação e igualdade e para funcionalidades compartilhadas por tipos de coleção genéricos. O .NET 7 introduz interfaces genéricas para tipos semelhantes a números, por exemplo, System.Numerics.INumber<TSelf>. Essas interfaces permitem definir métodos genéricos que fornecem funcionalidade matemática, onde o parâmetro de tipo genérico é restrito a ser um tipo que implementa uma interface numérica genérica.
Nota
Os parâmetros de tipo de várias interfaces genéricas são marcados como covariantes ou contravariantes, proporcionando maior flexibilidade na atribuição e utilização de tipos que implementam estas interfaces. Para obter mais informações, consulte Covariância e contravariância.
Comparações de igualdade e ordenação
System No namespace, as System.IComparable<T> interfaces e System.IEquatable<T> genéricas, como suas contrapartes não genéricas, definem métodos para ordenar comparações e comparações de igualdade, respectivamente. Os tipos implementam essas interfaces para fornecer a capacidade de realizar essas comparações.
No namespace, as System.Collections.GenericIComparer<T> interfaces e IEqualityComparer<T> genéricas oferecem uma maneira de definir uma comparação de ordenação ou igualdade para tipos que não implementam a System.IComparable<T> interface ou System.IEquatable<T> . Eles também fornecem uma maneira de redefinir essas relações para tipos que o fazem.
Essas interfaces são usadas por métodos e construtores de muitas das classes de coleção genéricas. Por exemplo, você pode passar um objeto genérico IComparer<T> para o construtor da classe para especificar uma ordem de SortedDictionary<TKey,TValue> classificação para um tipo que não implementa generic System.IComparable<T>. Há sobrecargas do Array.Sort método estático genérico e do List<T>.Sort método de instância para classificar matrizes e listas usando implementações genéricas IComparer<T> .
As Comparer<T> classes e EqualityComparer<T> generic fornecem classes base para implementações das interfaces e IEqualityComparer<T> genéricas e também fornecem ordenação padrão e comparações de igualdade através de IComparer<T> suas respetivas Comparer<T>.Default e EqualityComparer<T>.Default propriedades.
Funcionalidade de recolha
A ICollection<T> interface genérica é a interface básica para tipos de coleção genéricos. Ele fornece funcionalidade básica para adicionar, remover, copiar e enumerar elementos. ICollection<T> herda de genéricos IEnumerable<T> e não genéricos IEnumerable.
A IList<T> interface genérica estende a ICollection<T> interface genérica com métodos de recuperação indexada.
A IDictionary<TKey,TValue> interface genérica estende a ICollection<T> interface genérica com métodos de recuperação com chave. Tipos de dicionário genéricos na biblioteca de classes base do .NET também implementam a interface não genérica IDictionary .
A IEnumerable<T> interface genérica fornece uma estrutura de enumerador genérica. A IEnumerator<T> interface genérica implementada por enumeradores genéricos herda a interface não genérica IEnumerator , os MoveNext e Reset membros, que não dependem do parâmetro
T
type, aparecem apenas na interface não genérica. Isso significa que qualquer consumidor da interface não genérica também pode consumir a interface genérica.
Funcionalidade matemática
O .NET 7 introduz interfaces genéricas no namespace que descrevem tipos semelhantes a System.Numerics números e a funcionalidade disponível para eles. Os 20 tipos numéricos que a biblioteca de classes base do .NET fornece, por exemplo, Int32 e Double, foram atualizados para implementar essas interfaces. A mais proeminente dessas interfaces é INumber<TSelf>, que corresponde aproximadamente a um número "real".
Para obter mais informações sobre essas interfaces, consulte Matemática genérica.