Interfaces (Guía de programación de C#)
Actualización: noviembre 2007
Las interfaces se definen mediante la palabra clave interface, como se muestra en el ejemplo siguiente:
interface IEquatable<T>
{
bool Equals(T obj);
}
Las interfaces describen un grupo de funcionalidades relacionadas que pueden pertenecer a cualquier elemento class o struct. Las interfaces pueden estar compuestas de métodos, propiedades, eventos, indizadores o cualquier combinación de estos cuatro tipos de miembros. Una interfaz no puede contener campos. Los miembros de interfaz son automáticamente públicos.
Cuando se dice que una clase o estructura hereda una interfaz, significa que la clase o la estructura proporciona una implementación para todos los miembros que define la interfaz. La propia interfaz no proporciona ninguna funcionalidad que una clase o estructura pueda heredar de la manera en que se puede heredar la funcionalidad de una clase base. Sin embargo, si una clase base implementa una interfaz, la clase derivada hereda esta implementación.
Al igual que las clases se pueden heredar de una clase base o estructura, las clases y estructuras se pueden heredar de interfaces, con dos excepciones:
Una clase o estructura puede heredar más de una interfaz.
Cuando una clase o la estructura hereda una interfaz, hereda sólo los nombres de método y las firmas, ya que la propia interfaz no contiene ninguna implementación. Por ejemplo:
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; } }
Para implementar un miembro de interfaz, el miembro correspondiente de la clase debe ser público, no estático y tener el mismo nombre y la misma firma que el miembro de interfaz. Las propiedades e indizadores de una clase pueden definir descriptores de acceso adicionales para una propiedad o indizador definidos en una interfaz. Por ejemplo, una interfaz puede declarar una propiedad con un descriptor de acceso get, pero la clase que implementa la interfaz puede declarar la misma propiedad con descriptores de acceso get y set. Sin embargo, si la propiedad o el indizador utiliza una implementación explícita, los descriptores de acceso deben coincidir.
Las interfaces y los miembros de interfaz son abstractos; las interfaces no proporcionan una implementación predeterminada. Para obtener más información, vea Clases y miembros de clase abstractos y sellados (Guía de programación de C#).
La interfaz IEquatable<T> informa al usuario del objeto de que éste puede determinar si es igual que otros objetos del mismo tipo; el usuario de la interfaz no necesita saber cómo se implementa.
Las interfaces pueden heredar otras interfaces. Es posible que una clase herede una interfaz varias veces, a través de las clases base o interfaces que hereda. En ese caso, la clase sólo puede implementar la interfaz una vez, siempre que ésta se declare como parte de la nueva clase. Si la interfaz heredada no está declarada como parte de la nueva clase, la clase base que la declaró proporcionará su implementación. Es posible que una clase base implemente miembros de interfaz a través de miembros virtuales. En ese caso, la clase que hereda la interfaz puede cambiar el comportamiento de la interfaz reemplazando los miembros virtuales. Para obtener más información sobre miembros virtuales, vea Polimorfismo (Guía de programación de C#).
Información general sobre interfaces
Una interfaz tiene las siguientes propiedades:
Una interfaz es como una clase base abstracta: cualquier tipo no abstracto que hereda la interfaz debe implementar todos sus miembros.
No se pueden crear instancias directamente de una interfaz.
Las interfaces pueden contener eventos, métodos, indizadores y propiedades.
Las interfaces no contienen implementaciones de métodos.
Las clases y estructuras se pueden heredar de más de una interfaz.
Una interfaz se puede heredar de varias interfaces.
En esta sección
Implementación explícita de interfaz (Guía de programación de C#)
Explica cómo crear un miembro de clase específico de una interfaz.Cómo: Implementar explícitamente miembros de interfaz (Guía de programación de C#)
Proporciona un ejemplo de cómo implementar explícitamente miembros de interfaces.Cómo: Implementar explícitamente miembros de interfaz con herencia (Guía de programación de C#)
Proporciona un ejemplo de cómo implementar explícitamente miembros de interfaces con herencia.
Secciones relacionadas
Propiedades de interfaces (Guía de programación de C#)
Explica cómo declarar propiedades de una interfaz.Indizadores en interfaces (Guía de programación de C#)
Explica cómo declarar indizadores en una interfaz.Cómo: Implementar eventos de interfaz (Guía de programación de C#)
Muestra cómo puede declarar un evento una interfaz.Clases y estructuras (Guía de programación de C#)
Describe cómo utiliza C# los objetos, las clases y las estructuras.Herencia (Guía de programación de C#)
Explica cómo implementa C# la herencia.Métodos (Guía de programación de C#)
Explica los conceptos de métodos con nombre en el modelo de programación de C#.Polimorfismo (Guía de programación de C#)
Describe cómo se pueden utilizar las clases como más de un tipo en C#.Clases y miembros de clase abstractos y sellados (Guía de programación de C#)
Describe cómo afectan las palabras clave abstract y sealed a la herencia.Propiedades (Guía de programación de C#)
Explica el concepto de propiedades en C#.Eventos (Guía de programación de C#)
Explica el concepto de eventos en C#.Indizadores (Guía de programación de C#)
Explica el concepto de indizadores en C#.