Interfacce (Guida per programmatori C#)
Le interfacce descrivono un gruppo di funzionalità correlate che possono appartenere a qualsiasi classe o struttura. Le interfacce vengono definite utilizzando la parola chiave interface, come illustrato nell'esempio seguente.
interface IEquatable<T>
{
bool Equals(T obj);
}
Le interfacce son costituite da metodi, proprietà, eventi, indicizzatori o qualsiasi combinazione di questi quattro tipi di membro. Interfaccia non può contenere le costanti, i campi, gli operatori, i costruttori di istanza, i distruttori o i tipi. Non può contenere membri statici. I membri delle interfacce sono automaticamente pubblici e non possono includere nessun modificatore di accesso.
Quando una classe o una struttura implementa un'interfaccia, la classe o la struttura forniscono un'implementazione per tutti i membri definiti dall'interfaccia. L'interfaccia stessa non fornisce funzionalità ereditabili da una classe o una struttura, nel modo in cui le funzionalità della classe base possono essere ereditate. Tuttavia, se una classe base implementa un'interfaccia, la classe derivata eredita tale implementazione. La classe derivata implementa l'interfaccia in modo implicito.
Classi e struct possono implementare le interfacce, così come le classi possono ereditare una classe base o una struttura, con due eccezioni:
Una classe o uno struct può implementare più interfacce.
Quando una classe o una struttura implementa un'interfaccia, riceve solo i nomi e le firme dei metodi perché l'interfaccia stessa non contiene implementazioni, come illustrato nell'esempio seguente.
public class Car : IEquatable<Car> { public string Make {get; set;} public string Model { get; set; } public string Year { get; set; } // Implementation of IEquatable<T> interface public bool Equals(Car car) { if (this.Make == car.Make && this.Model == car.Model && this.Year == car.Year) { return true; } else return false; } }
L'interfaccia IEquatable<T> annuncia all'utente dell'oggetto che quest'ultimo può determinare la propria uguaglianza con altri oggetti dello stesso tipo. L'utente dell'interfaccia non deve necessariamente conoscerne la modalità di implementazione.
Per implementare un membro di un'interfaccia, è necessario che il membro corrispondente della classe sia pubblico, non statico e disponga dello stesso nome e della stessa firma del membro dell'interfaccia. Le proprietà e gli indicizzatori di una classe possono definire funzioni di accesso aggiuntive per una proprietà o per un indicizzatore definito in un'interfaccia. Ad esempio, un'interfaccia può dichiarare una proprietà che dispone di una funzione di accesso get. La classe che implementa l'interfaccia può dichiarare la stessa proprietà sia con la funzione di accesso get che con la funzione di accesso set. Se tuttavia la proprietà o l'indicizzatore utilizza l'implementazione esplicita, le funzioni di accesso devono corrispondere. Per ulteriori informazioni sull'implementazione esplicita, vedere Proprietà dell'interfaccia (Guida per programmatori C#).
Le interfacce e i relativi membri sono astratti. Le interfacce non prevedono un'implementazione predefinita. Per ulteriori informazioni, vedere Classi e membri delle classi astratte e sealed.
Le interfacce possono ereditare altre interfacce. Una classe può ereditare un'interfaccia più volte, tramite le classi basi o le interfacce che eredita da altre interfacce. Tuttavia, la classe può implementare l'interfaccia solo una volta, e solo se l'interfaccia viene dichiarata come parte della definizione della classe come in class ClassName : InterfaceName. Se l'interfaccia viene ereditata perché è stata ereditata una classe base che implementa l'interfaccia, la relativa implementazione viene fornita dalla classe base. È inoltre possibile che una classe base implementi i membri dell'interfaccia mediante membri virtuali. In tal caso, una classe derivata può modificare il comportamento dell'interfaccia eseguendo l'override dei membri virtuali. Per ulteriori informazioni sui membri virtuali, vedere Polimorfismo.
Cenni preliminari sulle interfacce
Di seguito sono riportate le caratteristiche principali di un'interfaccia:
Un'interfaccia è analoga a una classe base astratta: qualsiasi tipo non astratto che implementa l'interfaccia deve implementarne tutti i relativi membri.
Non è possibile creare direttamente istanze di un'interfaccia.
Le interfacce possono contenere eventi, indicizzatori, metodi e proprietà.
Le interfacce non contengono implementazioni di metodi.
Le classi e le strutture possono implementare più interfacce.
Un'interfaccia può a sua volta ereditare da più interfacce.
Argomenti della sezione
Implementazione esplicita dell'interfaccia (Guida per programmatori C#)
Viene spiegato come creare un membro della classe specifico per un'interfaccia.Procedura: implementare in modo esplicito i membri di interfaccia (Guida per programmatori C#)
Viene fornito un esempio di come implementare in modo esplicito membri di interfacce.Procedura: implementare in modo esplicito i membri di due interfacce (Guida per programmatori C#)
Viene fornito un esempio di come implementare in modo esplicito membri di interfacce con l'ereditarietà.
Sezioni correlate
Proprietà dell'interfaccia (Guida per programmatori C#)
Viene spiegato come dichiarare le proprietà su un'interfaccia.Indicizzatori nelle interfacce (Guida per programmatori C#)
Viene spiegato come dichiarare gli indicizzatori su un'interfaccia.Procedura: implementare gli eventi di interfaccia (Guida per programmatori C#)
Viene illustrato come un'interfaccia può dichiarare un evento.Classi e struct (Guida per programmatori C#)
Viene descritto come C# utilizza oggetti, classi e strutture.Ereditarietà (Guida per programmatori C#)
Viene spiegato come C# implementa l'ereditarietà.Metodi (Guida per programmatori C#)
Vengono spiegati i concetti dei metodi denominati nel modello di programmazione C#.Polimorfismo (Guida per programmatori C#)
Viene descritto come le classi possono essere utilizzate come tipi in C#.Classi e membri delle classi astratte e sealed (Guida per programmatori C#)
Viene descritto come le parole chiave abstract e sealed hanno effetto sull'ereditarietà.Proprietà (Guida per programmatori C#)
Viene spiegato il concetto di proprietà in C#.Eventi (Guida per programmatori C#)
Viene spiegato il concetto di evento in C#.Indicizzatori (Guida per programmatori C#)
Viene spiegato il concetto di indicizzatore in C#.
Capitolo del libro rappresentati
Interfaces in Learning C# 3.0: Master the Fundamentals of C# 3.0
Vedere anche
Riferimenti
Ereditarietà (Guida per programmatori C#)
Concetti
Cronologia delle modifiche
Data |
Cronologia |
Motivo |
---|---|---|
Luglio 2010 |
Distinzione tra l'implementazione e l'ereditarietà. Chiarimento relativo a ciò che può e non può essere incluso nelle interfacce. |
Commenti e suggerimenti dei clienti. |