Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
Este artigo fornece uma visão geral das interfaces genéricas do .NET que fornecem funcionalidade comum entre famílias de tipos genéricos.
As interfaces genéricas fornecem contrapartes fortemente tipadas para interfaces não genéricas com a finalidade de realizar comparações de ordenação e de igualdade e para a funcionalidade que é compartilhada 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, em que 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 no uso de tipos que implementam essas interfaces. Para obter mais informações, consulte Covariance e Contravariance.
Comparações de ordem e igualdade
No namespace System, as interfaces System.IComparable<T> e System.IEquatable<T> genéricas, assim como suas equivalentes não genéricas, definem métodos para comparações de ordem e de igualdade, respectivamente. Os tipos implementam essas interfaces para fornecer a capacidade de executar essas comparações.
No namespace System.Collections.Generic, as interfaces IComparer<T> e IEqualityComparer<T> genéricas 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, você pode passar um objeto genérico IComparer<T> ao 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 base para implementações das interfaces genéricas IComparer<T> e IEqualityComparer<T> e também oferecem comparações padrão de ordenação e igualdade através de suas propriedades Comparer<T>.Default e EqualityComparer<T>.Default.
Funcionalidade de coleção
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 da IEnumerable<T> genérica e da IEnumerable não genérica.
A IList<T> interface genérica estende a ICollection<T> interface genérica com métodos de recuperação indexada.
A interface genérica IDictionary<TKey,TValue> estende a interface genérica ICollection<T> com métodos para recuperação por chave. Tipos genéricos de dicionário 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érico. 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
O .NET 7 apresenta interfaces genéricas no System.Numerics namespace que descrevem tipos semelhantes a 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 Doubleforam atualizados para implementar essas interfaces. O mais proeminente dessas interfaces é INumber<TSelf>, que corresponde aproximadamente a um número "real".
Para obter mais informações sobre essas interfaces, consulte a matemática genérica.