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

Secciones relacionadas

Vea también

Conceptos

Guía de programación de C#

Referencia

Herencia (Guía de programación de C#)