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

Las interfaces describen un grupo de funcionalidades relacionadas que pueden pertenecer a cualquier elemento class o struct. Para definir una interfaz, utilice la palabra clave interface, como se muestra en el ejemplo siguiente.

interface IEquatable<T>
{
    bool Equals(T obj);
}

Las interfaces están compuestas de métodos, propiedades, eventos, indizadores o cualquier combinación de estos cuatro tipos de miembros. Una interfaz no puede contener constantes, campos, operadores, constructores de instancias, destructores o tipos. No puede contener miembros estáticos. Los miembros de interfaz son automáticamente públicos y no pueden incluir ningún modificador de acceso.

Cuando una clase o struct implementa una interfaz, dicha clase o struct proporciona una implementación para todos los miembros que define la interfaz. La propia interfaz no proporciona ninguna funcionalidad que una clase o struct 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. Se dice que la clase derivada implementa la interfaz de forma implícita.

Al igual que las clases heredan una clase base o struct, las clases y structs implementan interfaces, con dos excepciones:

  • Una clase o struct puede implementar más de una interfaz.

  • Cuando una clase o struct implementan una interfaz, recibe sólo los nombres de métodos y las firmas, ya que la propia interfaz no contiene ninguna implementación, como se muestra en el ejemplo siguiente.

    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;
        }
    }
    

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.

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 que tiene un descriptor de acceso get. La clase que implementa la interfaz puede declarar la misma propiedad con los 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. Para obtener más información sobre la implementación explícita, vea Propiedades de interfaces (Guía de programación de C#).

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#).

Las interfaces pueden heredar otras interfaces. Es posible que una clase herede una interfaz varias veces, a través de las clases base que hereda o de interfaces heredadas por otras interfaces. Sin embargo, la clase puede implementar una interfaz solo una vez y solo si la interfaz se declara como parte de la definición de clase, como en class ClassName : InterfaceName. Si la interfaz se hereda porque se heredó una clase base que implementa esta interfaz, dicha clase base proporcionará su implementación. También es posible que una clase base implemente miembros de interfaz a través de miembros virtuales. En ese caso, una clase derivada puede cambiar el comportamiento de la interfaz al invalidar 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 implementa 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 structs pueden implementar más de una interfaz.

  • Una interfaz se puede heredar de varias interfaces.

En esta sección

Secciones relacionadas

Capítulo destacados del libro

Interfaces en Learning C# 3.0: Master the Fundamentals of C# 3.0

Vea también

Referencia

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

Conceptos

Guía de programación de C#

Historial de cambios

Fecha

Historial

Motivo

Julio de 2010

Se distingue entre la implementación y la herencia. Se clarificó qué se puede incluir o no en las interfaces.

Comentarios de los clientes.