Datapayasadas

octubre 19, 2009

IDataPayasadas: Trabajando con Interfaces

Filed under: C# — Etiquetas: , — pabloide86 @ 9:00 am

Buenas amigos! Hoy vamos a hablar un poquito sobre el uso de interfaces. ¿Qué son? ¿Para qué sirven? ¿Cómo usarlas? Éstas son algunas de las interrogantes que intentaremos responder.

¿Qué son?

Las interfaces son un conjunto de miembros abstractos (es decir, que no proveen una implementación por defecto) definidos bajo un nombre. Dichos miembros pueden ser por ejemplo métodos.

¿Para qué sirven?

Las interfaces expresan un protocolo o un comportamiento que las clases o estructuras deben implementar. Podemos pensarlo como un contrato que aceptan las clases si quieren implementar ese protocolo.

¿Cómo se usan?

Veamos un ejemplo para aclarar el panorama. Supongamos que tenemos la siguiente interface:

public interface IDataPayasadas
{
     //Propiedades
     string Mensaje { get; set; }
     //Métodos
     void Saludo();
}

Un método Saludo y una propiedad Mensaje.

Supongamos que tenemos la siguiente clase:

public class MyDataPayasadas : IDataPayasadas
{
     string Mensaje { get; set; }
     void Saludo()
     {
          Console.Write(string.Format("Hola mundo! Te traigo un mensaje: {0}", Mensaje);
     }
}

¿Qué fue lo que pasó? Simplemente implementamos la interface IDataPayasadas. ¿Y con eso qué gano? No mucho. Pero, ¿qué pasa si tengo otra clase que implementa IDataPayasadas y quiero usarlas indistintamente? Supongamos la clase:

public class MyDataPayasadasNuevo : IDataPayasadas
{
     string Mensaje { get; set; }
     void Saludo()
     {
          MessageBox.Show(Mensaje);
     }
}

Aquí es donde se ve el beneficio de usar interfaces, ya que puedo llamar al método Saludo indistintamente de su implementación:

public class Program
{
     void Main()
     {
          IDataPayasadas saludo1 = new MyDataPayasadas();
          saludo1.Mensaje = "hola";
          saludo1.Saludo();

          IDataPayasadas saludo2 = new MyDataPayasadasNuevo();
          saludo2.Mensaje = "hola";
          saludo2.Saludo();
     }
}

MyDataPayasadas y MyDataPayasadasNuevo tienen formas diferentes de mostrar el mensaje, pero como implementan la interface IDataPayasadas puedo estar tranquilo de que si o si van a tener una propiedad Mensaje y un método Saludo.

También podemos implementar más de una interface. La forma de hacerlo es:

public class MyClase : IDataPayasadas, ICloneable
{
     ...
}

También puede ser que una clase derive de otra y a la vez implemente varias interfaces:

public class MyClase : MyClaseBase, IDataPayasadas, ICloneable
{
     ...
}

Podemos verificar si una clase implementa una interface mediante la palabra clave is:

if(MyDataPayasadas is IDataPayasadas)
{
     MyDataPayasadas.Saludo();
}
else
{
     Console.Write("No implementa IDataPayasadas");
}

¿Cuál es la diferencia con una Clase Base Abstractas?

Las clases base abstractas además pueden definir constructores, variables de campo, miembros no abstractos (con implementación), etc.

En cambio las interfaces solo definen miembros abstractos.

Hay toda una serie de escenarios y motivos por los cuales son diferentes, pero escapa del objetivo de este post que es acercarles una introducción a lo que son las interfaces y para que pueden ser útiles.

Resumiendo:

  • Las interfaces son puro protocolo: definen qué comportamientos debe tener la clase, pero no se puede definir cómo implementarlos.
  • Los miembros son por defecto públicos y abstractos. No es necesario definir el scope de cada miembro.
  • No puede contener variables de campo
  • No puede definir constructores
  • No puede contener implementaciónes
  • Las interfaces no se pueden instanciar!!! (No intenten hacer IDataPayasadas dp = new IDataPayasadas();)
  • Las interfaces se pueden usar como tipo, por lo tanto podemos pasarlas como parámetros, como tipo de retorno de un método, podemos crear arrays de interfaces (IDataPayasadas[] dps = {new MyDataPayasadas(), new MyDataPayasadasNuevo()};)

Espero que les sea de utilidad! Cualquier duda o sugerencia pregunten nomas. Saludos!

Anuncios

Dejar un comentario »

Aún no hay comentarios.

RSS feed for comments on this post. TrackBack URI

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s

Blog de WordPress.com.

A %d blogueros les gusta esto: