Il modo più semplice per comprendere le interfacce è che consentono a oggetti diversi di esporre la funzionalità COMMON. Ciò consente al programmatore di scrivere molto più semplice, codice più corto che programma su un'interfaccia, quindi finché gli oggetti implementano quell'interfaccia funzionerà.
Provider
Database:
Ci sono molti fornitori di database diversi, MySQL, MSSQL, Oracle, ecc, tuttavia tutti gli oggetti di database in grado di fare le stesse cose in modo troverete molte interfacce per gli oggetti di database. Se un oggetto implementa IDBConnection, espone i metodi Open() e Close(). Quindi, se voglio che il mio programma sia indipendente dal provider di database, programma l'interfaccia e non i provider specifici.
IDbConnection connection = GetDatabaseConnectionFromConfig()
connection.Open()
// do stuff
connection.Close()
V., per la programmazione di un'interfaccia (IDbConnection) Ora posso scambiare qualsiasi provider di dati nel mio config ma il mio codice rimane esattamente lo stesso. Questa flessibilità può essere estremamente utile e facile da mantenere. Il lato negativo di questo è che posso eseguire solo operazioni di database "generiche" e che non posso sfruttare appieno la forza offerta da ciascun fornitore in modo tale che con tutto ciò che si sta programmando si ha un compromesso e si deve determinare quale scenario sarà più vantaggioso.
Collezioni:
Se si nota quasi tutte le collezioni implementare questa interfaccia IEnumerable chiamato. IEnumerable restituisce un IEnumerator che ha MoveNext(), Current e Reset(). Ciò consente a C# di spostarsi facilmente nella tua collezione. La ragione per cui può farlo è che espone l'interfaccia IEnumerable che CONOSCE che l'oggetto espone i metodi necessari per attraversarlo. Questo fa due cose. 1) foreach loops ora saprà come enumerare la raccolta e 2) ora puoi applicare potenti espression LINQ alla tua collezione. Ancora una volta il motivo per cui le interfacce sono così utili qui è perché tutte le collezioni hanno qualcosa in COMMON, possono essere spostate. Ogni collezione può essere spostata in un modo diverso (elenco collegato vs array) ma questa è la bellezza delle interfacce è che l'implementazione è nascosta e irrilevante per il consumatore dell'interfaccia. MoveNext() ti dà il prossimo oggetto della collezione, non importa come lo fa. Abbastanza carino, eh?
polimorfismo
Quando si progetta le proprie interfacce basta porsi una domanda. Cosa hanno in comune queste cose? Una volta trovate tutte le cose che condividono gli oggetti, si astraggono tali proprietà/metodi in un'interfaccia in modo che ogni oggetto possa ereditarsene. Quindi puoi programmare contro diversi oggetti usando un'unica interfaccia.
E ovviamente devo dare il mio esempio polimorfico C++ preferito, l'esempio degli animali. Tutti gli animali condividono determinate caratteristiche. Diciamo che possono muoversi, parlare e hanno tutti un nome. Da quando ho appena identificato ciò che tutti i miei animali hanno in comune e posso astrarre quelle qualità nell'interfaccia IAnimal. Quindi creo un oggetto Bear, un oggetto Owl e un oggetto Snake che implementano questa interfaccia.Il motivo per cui è possibile memorizzare diversi oggetti insieme che implementano la stessa interfaccia è perché le interfacce rappresentano una sostituzione di IS-A. Un orso è un animale, un gufo è un animale, così da quando posso raccoglierli tutti come animali.
var animals = new IAnimal[] = {new Bear(), new Owl(), new Snake()} // here I can collect different objects in a single collection because they inherit from the same interface
foreach (IAnimal animal in animals)
{
Console.WriteLine(animal.Name)
animal.Speak() // a bear growls, a owl hoots, and a snake hisses
animal.Move() // bear runs, owl flys, snake slithers
}
Si può vedere che, anche se questi animali svolgono ogni azione in un modo diverso, posso programmare contro di loro tutti in un modello unificato e questo è solo uno dei molti vantaggi di interfacce.
Quindi, ancora una volta, la cosa più importante con le interfacce è ciò che gli oggetti hanno in comune in modo che sia possibile programmare contro DIVERSI oggetti nel modo SAME. Risparmia tempo, crea applicazioni più flessibili, nasconde complessità/implementazione, modella oggetti/situazioni del mondo reale, tra molti altri vantaggi.
Spero che questo aiuti.
Ciò può aiutare: le interfacce descrivono gli attributi * periferici *, le classi astratte definiscono le funzioni * core *. – Jason
se si desidera che il progetto supporti diversi database. in modo che il cliente possa cambiare il suo database in futuro usiamo le interfacce contiene le procedure di proprietà nel file di classe con gli oggetti alteranti ........ –
Ci sono dozzine di potenziali duplicati di questa domanda ... eccone alcuni: [1 ] (http://stackoverflow.com/questions/240152/why-would-i-want-to-use-interfaces), [2] (http://stackoverflow.com/questions/3355408/explaining-interfaces-to -studenti), [3] (http://stackoverflow.com/questions/122883/interfaces-why-cant-i-seem-to-grasp-them) –