miércoles, 24 de febrero de 2010

Cómo: Implementar explícitamente miembros de interfaz

En este ejemplo se declara una interfaz IDimensiones y una clase Caja, la cual implementa explícitamente los miembros de la interfaz getLargo y getAncho. El acceso a los miembros se realiza a través de la instancia de interfaz dimensiones.

Ejemplo:
interface IDimensiones
{
float getLargo();
float getAncho();
}

class Caja : IDimensiones
{
float largopulgadas;
float anchopulgadas;

Caja(float largo, float ancho)
{
largopulgadas = largo;
anchopulgadas = ancho;
}
// Implementacion de los miembros de la interface de forma explicita:
float IDimensiones.getLargo()
{
return largopulgadas;
}

float IDimensiones.getAncho()
{
return anchopulgadas;
}

static void Main()
{
// Creando una instancia Caja1 de la clase Caja:
Caja caja1 = new Caja(30.0f, 20.0f);

// Declarando una instancia de la interfaz dimenciones:

IDimensiones dimensiones = (IDimensions)caja1;

// Las siguientes lineas que estan comentadas producirian un error al compilar porque intentan acceder a un miembro de una interface implementada implicitamente desde una instancia de una clase:
//System.Console.WriteLine("Largo: {0}", caja1.getlargo());
//System.Console.WriteLine("Ancho: {0}", caja1.getancho());

// Imprimiendo las dimenciones de la Caja llamando los metodos
// desde una instancia de una interface:

System.Console.WriteLine("Largo: {0}", dimensiones.getLargo());
System.Console.WriteLine("Ancho: {0}", dimensiones.getAncho());
}
}
Resultados
Length: 30
Width: 20
Programación eficaz
Observe que las siguientes líneas, en el método Main, están desactivadas mediante comentarios, ya que producirían errores de compilación. No se puede obtener acceso desde una instancia de clase a un miembro de interfaz implementado explícitamente:

System.Console.WriteLine("Largo: {0}", caja1.getlargo());
//System.Console.WriteLine("Width: {0}", caja1.getancho());
Observe también que las siguientes líneas del método Main imprimen correctamente las dimensiones del cuadro, ya que los métodos se invocan desde una instancia de la interfaz:

System.Console.WriteLine("Largo: {0}", dimensiones.getLarlo());
System.Console.WriteLine("Ancho: {0}", dimensiones.getAncho());

No hay comentarios.:

Publicar un comentario

Preguntas;Comentarios;Aportes;Criticas Positivas;Recomendaciones.