Interfacce nel sistema di tipi comuni
Aggiornamento: novembre 2007
Un'interfaccia definisce un contratto che specifica una relazione di tipo "può" o una relazione di tipo "ha". Le interfacce vengono in genere utilizzate per implementare funzionalità, ad esempio il confronto e l'ordinamento (interfacce IComparable e IComparable<T>), il test di uguaglianza (interfaccia IEquatable<T>) o l'enumerazione di elementi in un insieme (interfacce IEnumerable e IEnumerable<T>). Le interfacce possono includere proprietà, metodi ed eventi, che sono tutti membri astratti; ossia, anche se l'interfaccia definisce i membri e le relative firme, il compito di definire le funzionalità di ogni membro viene lasciato al tipo che implementa l'interfaccia. Ciò significa che qualsiasi classe o struttura che implementa un'interfaccia deve fornire le definizioni per i membri astratti dichiarati nell'interfaccia. Per un'interfaccia si può richiedere che qualsiasi classe o struttura implementata debba anche implementare una o più altre interfacce.
Alle interfacce si applicano le seguenti restrizioni:
Un'interfaccia può essere dichiarata con qualsiasi accessibilità ma i membri di interfaccia devono tutti avere accessibilità pubblica.
Nessuna autorizzazione di protezione può essere allegata ai membri o all'interfaccia stessa.
Con un'interfaccia non è possibile definire costruttori.
Le interfacce non possono definire campi.
Tutti i metodi, gli eventi e le proprietà astratte definite in un'interfaccia devono essere membri di istanza e non membri statici.
Ogni linguaggio deve fornire regole per il mapping di un'implementazione all'interfaccia che richiede il membro, in quanto più interfacce possono dichiarare un membro con la stessa firma e i membri possono avere implementazioni separate.