Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
Questo articolo offre una panoramica delle interfacce generiche di .NET che forniscono funzionalità comuni tra famiglie di tipi generici.
Le interfacce generiche forniscono controparti sicure per i tipi alle interfacce non generiche per l'ordinamento e i confronti di uguaglianza, nonché per le funzionalità condivise dai tipi di raccolta generici. .NET 7 introduce interfacce generiche per tipi simili a numeri, System.Numerics.INumber<TSelf>ad esempio . Queste interfacce consentono di definire metodi generici che forniscono funzionalità matematiche, in cui il parametro di tipo generico è vincolato a un tipo che implementa un'interfaccia generica numerica.
Annotazioni
I parametri di tipo di diverse interfacce generiche sono contrassegnati come covarianti o controvarianti, offrendo maggiore flessibilità nell'assegnazione e nell'uso di tipi che implementano queste interfacce. Per altre informazioni, vedere Covarianza e Controvarianza.
Confronti di uguaglianza e ordine
Nello spazio dei nomi System, le interfacce generiche System.IComparable<T> e System.IEquatable<T>, come le loro controparti non generiche, definiscono rispettivamente i metodi per confronti di ordinamento e confronti di uguaglianza. I tipi implementano queste interfacce per consentire l'esecuzione di tali confronti.
Nello spazio dei nomi System.Collections.Generic, le interfacce generiche IComparer<T> e IEqualityComparer<T> offrono un modo per definire un confronto di ordinamento o uguaglianza per i tipi che non implementano le interfacce System.IComparable<T> o System.IEquatable<T>. Forniscono anche un modo per ridefinire le relazioni per i tipi che eseguono.
Queste interfacce vengono usate da metodi e costruttori di molte classi di raccolte generiche. Ad esempio, è possibile passare un oggetto generico IComparer<T> al costruttore della SortedDictionary<TKey,TValue> classe per specificare un ordinamento per un tipo che non implementa un oggetto generico System.IComparable<T>. Esistono overload del metodo statico generico Array.Sort e del metodo di istanza List<T>.Sort per l'ordinamento di array e liste utilizzando implementazioni generiche IComparer<T>.
Le Comparer<T> classi generiche e EqualityComparer<T> forniscono classi di base per le implementazioni delle IComparer<T> interfacce generiche e IEqualityComparer<T> e forniscono anche confronti di ordinamento e uguaglianza predefiniti tramite le rispettive Comparer<T>.Default proprietà e EqualityComparer<T>.Default .
Funzionalità di raccolta
L'interfaccia ICollection<T> generica è l'interfaccia di base per i tipi di raccolta generici. Offre funzionalità di base per l'aggiunta, la rimozione, la copia e l'enumerazione di elementi. ICollection<T> eredita sia da generico IEnumerable<T> che da non generico IEnumerable.
L'interfaccia IList<T> generica estende l'interfaccia ICollection<T> generica con i metodi per il recupero indicizzato.
L'interfaccia IDictionary<TKey,TValue> generica estende l'interfaccia ICollection<T> generica con i metodi per il recupero con chiave. I tipi di dizionario generici nella libreria di classi di base .NET implementano anche l'interfaccia non generica IDictionary .
L'interfaccia IEnumerable<T> generica fornisce una struttura di enumeratore generica. L'interfaccia generica implementata dagli enumeratori generici eredita l'interfaccia non generica IEnumerator<T>. I membri IEnumerator e MoveNext, che non dipendono dal parametro di tipo Reset, appaiono solo sull'interfaccia non generica. Ciò significa che qualsiasi utente dell'interfaccia non generica può utilizzare anche l'interfaccia generica.
Funzionalità matematiche
.NET 7 introduce interfacce generiche nello spazio dei nomi System.Numerics che descrivono tipi simili a numeri e le funzionalità disponibili. I 20 tipi numerici forniti dalla libreria di classi di base .NET, ad esempio Int32 e Double, sono stati aggiornati per implementare queste interfacce. Il più importante di queste interfacce è INumber<TSelf>, che corrisponde approssimativamente a un numero "reale".
Per altre informazioni su queste interfacce, vedere Matematica generica.