La forma más fácil de entender las interfaces es que permiten que diferentes objetos expongan la funcionalidad COMÚN. Esto le permite al programador escribir un código mucho más simple y corto que los programas a una interfaz, entonces, siempre y cuando los objetos implementen esa interfaz, funcionará.
Proveedores
Base de Datos:
Hay muchos diferentes proveedores de bases de datos, MySQL, MSSQL, Oracle, etc. Sin embargo todos los objetos de base de datos pueden hacer las mismas cosas por lo que encontrará muchas interfaces para objetos de base. Si un objeto implementa IDBConnection, entonces expone los métodos Open() y Close(). Entonces, si quiero que mi programa sea independiente de la base de datos, programo en la interfaz y no a los proveedores específicos.
IDbConnection connection = GetDatabaseConnectionFromConfig()
connection.Open()
// do stuff
connection.Close()
Ver por la programación de una interfaz (IDbConnection) ahora puede intercambiar cualquier proveedor de datos de configuración en mi, pero mi código se mantiene exactamente el mismo. Esta flexibilidad puede ser extremadamente útil y fácil de mantener. La desventaja de esto es que solo puedo realizar operaciones de base de datos 'genéricas' y es posible que no utilice por completo la fortaleza que ofrece cada proveedor en particular, así como con todo en la programación tiene una compensación y debe determinar qué escenario lo beneficiará más.
Colecciones:
Si se observa casi todas las colecciones implementan esta interfaz llamada IEnumerable. IEnumerable devuelve un IEnumerator que tiene MoveNext(), Current y Reset(). Esto permite que C# se mueva fácilmente a través de su colección. La razón por la que puede hacer esto es porque expone la interfaz IEnumerable. SABE que el objeto expone los métodos que necesita para atravesarlo. Esto hace dos cosas. 1) los bucles foreach ahora sabrán cómo enumerar la colección y 2) ahora puede aplicar poderosas exprsiones LINQ a su colección. De nuevo, la razón por la cual las interfaces son tan útiles aquí es porque todas las colecciones tienen algo en COMÚN, pueden moverse a través de ellas. Cada colección se puede mover de una manera diferente (lista vinculada vs matriz) pero esa es la belleza de las interfaces, es que la implementación está oculta e irrelevante para el consumidor de la interfaz. MoveNext() le proporciona el siguiente elemento de la colección, no importa cómo lo hace. Muy bien, ¿eh?
polimorfismo
Al diseñar sus propias interfaces sólo hay que hacerse una pregunta. ¿Qué tienen estas cosas en común? Una vez que encuentre todas las cosas que comparten los objetos, abstraiga esas propiedades/métodos en una interfaz para que cada objeto pueda heredar de ella. Entonces puede programar contra varios objetos usando una interfaz.
Y, por supuesto, tengo que dar mi ejemplo polimórfico de C++ favorito, el ejemplo de los animales. Todos los animales comparten ciertas características. Digamos que pueden Mover, Hablar y todos tienen un Nombre. Como acabo de identificar lo que todos mis animales tienen en común y puedo abstraer esas cualidades en la interfaz IAnimal. Luego creo un objeto Bear, un objeto Owl y un objeto Snake que implementan esta interfaz.La razón por la que puede almacenar juntos diferentes objetos que implementan la misma interfaz es porque las interfaces representan una reasignación IS-A. Un oso es un animal IS-A, un búho ES-Un animal, por lo que hace que pueda recogerlos a todos como animales.
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
}
Se puede ver que a pesar de que estos animales realizan cada acción de una manera diferente, puedo programar contra todos ellos en un modelo unificado y esto es sólo una de las muchas ventajas de las interfaces.
De nuevo, lo más importante con las interfaces es qué tienen los objetos en común para que pueda programar contra los objetos DIFERENTES de la MISMA manera. Ahorra tiempo, crea aplicaciones más flexibles, oculta la complejidad/implementación, modela objetos/situaciones del mundo real, entre muchos otros beneficios.
Espero que esto ayude.
Esto puede ayudar: las interfaces describen los atributos * periféricos *, las clases abstractas definen las funciones * core *. – Jason
si desea que su proyecto sea compatible con diferentes bases de datos. para que el cliente pueda cambiar su base de datos en el futuro, usamos interfaces que contienen procedimientos de propiedad en el archivo de clase sin alterar objetos ........ –
Hay docenas de posibles duplicados de esta pregunta ... aquí hay algunos: [1 ] (http://stackoverflow.com/questions/240152/why-would-i-want-to-use-interfaces), [2] (http://stackoverflow.com/questions/3355408/explaining-interfaces-to -estudiantes), [3] (http://stackoverflow.com/questions/122883/interfaces-why-cant-i-seem-to-grasp-them) –