Nota
O acesso a esta página requer autorização. Podes tentar iniciar sessão ou mudar de diretório.
O acesso a esta página requer autorização. Podes tentar mudar de diretório.
Este artigo fornece uma visão geral das interfaces genéricas do .NET que oferecem funcionalidade comum entre famílias de tipos genéricos.
As interfaces genéricas fornecem contrapartidas seguras para tipos às interfaces não genéricas para comparações de ordenação e igualdade, bem como para funcionalidades compartilhadas por tipos de coleções genéricas. 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.
Observação
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
No espaço de nomes System, as interfaces genéricas System.IComparable<T> e System.IEquatable<T>, como suas contrapartes não genéricas, definem métodos para comparações de ordenação e métodos para comparações de igualdade, respectivamente. Os tipos implementam essas interfaces para fornecer a capacidade de realizar essas comparações.
No namespace System.Collections.Generic, as interfaces genéricas IComparer<T> e IEqualityComparer<T> oferecem uma maneira de definir uma comparação de ordenação ou igualdade para tipos que não implementam as interfaces System.IComparable<T> 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, pode passar um objeto genérico IComparer<T> para o construtor da classe SortedDictionary<TKey,TValue> para especificar uma ordem de classificação para um tipo que não implementa genérico 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 classes genéricas Comparer<T> e EqualityComparer<T> fornecem classes de base para implementações das interfaces genéricas IComparer<T> e IEqualityComparer<T> e também oferecem ordenação padrão e comparações de igualdade através das suas propriedades respetivas Comparer<T>.Default e EqualityComparer<T>.Default.
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 ambos, genérico IEnumerable<T> e não genérico 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 membros MoveNext e Reset, que não dependem do parâmetro de tipo
T, 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
.NET 7 introduz interfaces genéricas no namespace System.Numerics que descrevem tipos semelhantes a números e a funcionalidade disponível para esses tipos. 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.