User avatar by pello in January 1, 1970, 1:00 am
En C# también se pueden crear interfaces como en Java, aunque el manejo de atributos se hace a través de las properties y es algo engorroso. Veamos un ejemplo básico: Definimos el interfaz bebida y una clase que lo implementa, el café.
/**
* Interfaces.cs
* Programa que muestra el uso de interfaces. Al igual que en Java los interfaces son 
* como clases abstractas pero sin implementación alguna. Su objetivo es servir como 
* plantilla a las clases que lo implementan (sus métodos y atributos).
* Los interfaces no tienen constructores ni destructores, y todo es público.
*/

using System;

// Vamos a definir el interfaz Bebida
public interface Bebida
{
	// No podemos meter atributos sin más, 
	// Hay que usar properties.
	double precioLitro { get; set; }
	string color{ get; set; }
	string sabor{ get; set; }
	int azucar { get; set; }

	
	// Metemos algunos métodos, pero sin implementar.
	// Las clases que implementen este interfaz, deberán
	// tener este método.
	void mostrar();
	bool esDulce();
	void echarAzucar(int cantidad);
}


// Vamos a usar una clase que implemente el interfaz bebida
public class Cafe : Bebida
{
	// DEfinimos estos atributos y accedemos
	// a ellos a través de los properties
	private int azucarCafe;
	private string saborCafe;
	private string colorCafe;
	private double precioLitroCafe;
	
	// Implementamos las properties
	public double precioLitro 
	{ 
		get { return precioLitroCafe; }
		set { precioLitroCafe = value; }
	}
	public string color
	{ 
		get { return colorCafe; }
		set { colorCafe = value; }
	}
	public string sabor
	{ 
		get { return saborCafe; }
		set { saborCafe = value; }
	}
	public int azucar 
	{ 
		get { return azucarCafe; }
		set { azucarCafe = value; }
	}
	
	// Método constructor
	public Cafe()
	{
		azucar = 0;
		precioLitro = 5.6;
	}
	
	// Implementaciones del interfaz //////////
	
	// mostrar info
	public void mostrar()
	{
		System.Console.WriteLine("Esto es un Café");
	}
	
	// Pregunta si la bebida es dulce
	public bool esDulce()
	{
		if (sabor == "dulce")
		{
			return true;
		} 
		else 
		{
			return false;
		}
	}
	
	// Echa azucar en el Café
	public void echarAzucar(int cantidad)
	{
		azucar += cantidad;
	}
	
	// Método principal
	public static void Main ()
	{	
		Cafe cafeton = new Cafe();
		
		cafeton.sabor = "dulce";
		
		System.Console.WriteLine("Ya tenemos un cafe a {0:C#.##} /litro", cafeton.precioLitro);

		// Probamos a ver...
		if (cafeton.esDulce())
		{
			System.Console.WriteLine("Y está muy dulce");
		}
		
		
	}

}
Y ahora un ejemplo de implementación de multiples interfaces: Bebida y Estimulante. Dicen que es una aproximación a la herencia multiple. Anda que...
// Vamos a definir otro interfaz
public interface Estimulante
{
	// Properties
	double cafeina { get; set; }
	double teina { get; set; }
	double taurina { get; set; }
	double cachondina  { get; set; }
	
	// Metodos
	void mostrar();
	bool esMortal();
}

// Y ahora vamos a implementar este y otro interfaz
public class RezBull : Bebida, Estimulante
{
	private double RBCafeina;
	private double RBTeina;
	private double RBTaurina;
	private double RBCachondina;
	
	// Properties
	public double cafeina 
	{ 	
		get { return RBCafeina;  }
		set { RBCafeina = value; } 
	}

	public double teina 
	{ 	
		get { return RBTeina;  }
		set { RBTeina = value; } 
	}

	public double taurina 
		{ 	
		get { return RBTaurina;  }
		set { RBTaurina = value; } 
	}

	public double cachondina  
	{ 	
		get { return RBCachondina;  }
		set { RBCachondina = value; } 
	}
	
		// DEfinimos estos atributos y accedemos
	// a ellos a través de los properties
	private int azucarCafe;
	private string saborCafe;
	private string colorCafe;
	private double precioLitroCafe;
	
	// Implementamos las properties
	public double precioLitro 
	{ 
		get { return precioLitroCafe; }
		set { precioLitroCafe = value; }
	}
	public string color
	{ 
		get { return colorCafe; }
		set { colorCafe = value; }
	}
	public string sabor
	{ 
		get { return saborCafe; }
		set { saborCafe = value; }
	}
	public int azucar 
	{ 
		get { return azucarCafe; }
		set { azucarCafe = value; }
	}
	
	// Constructor
	public RezBull ()
	{
		taurina = 66.6;
		teina = 0.0;
		cafeina = 453.98;
	}
	
	
	// Implementaciones del interfaz //////////
	// Pregunta si la bebida es dulce
	public bool esDulce()
	{
			return false;
	}
	
	// Echa azucar en el RezBull
	public void echarAzucar(int cantidad)
	{
		azucar += cantidad;
	}
	
	// Mostrar. Para distinguir entre los dos interfaces, ponemos el prefijo
	void Bebida.mostrar()
	{
		System.Console.WriteLine("Esta es una bebida inclasificable");
	}
		
	// Mostrar. Para distinguir entre los dos interfaces, ponemos el prefijo
	void Estimulante.mostrar()
	{
		System.Console.WriteLine("Esta bebida mata, o eso dicen");
	}	
	
	// Implementacion sencilla de esMortal
	bool Estimulante.esMortal()
	{
		return true;
	}
}
0 comments |  PELMAlink |  1786 reads
0 of 0
make a comment
Comments
Show all fields