C# día 05: clases!

Veamos como se definen las clases. La cosa no cambia salvo alguna cosa curiosa; si no se especifica otra cosa, los atributos y métodos NO son accesibles, vamos que NO son public por defecto. Veamos la clase Punto, y luego una clase que le crea un instancia y lo usa.


using System;


// Definimos la clase punto,
// que se refiere a un punto en una coordenadas
public class Punto {

	// ATENCION: SI NO SE ESPECIFICA NADA,
	// los atributos y metodos NO SON accesibles
	public int x;
	public int y;
	
	// Constructora: siempre con el mismo nombre que la clase
	public Punto () 
	{
		// Aprovechamos para inicializar atributos
		this.x = 0;
		this.y = 0;
	}
	
	// Una funcion llamada posicion
	// Devuelve por consola la posicion actual de X
	public int posicionX () 
	{
		return x;
	}

	// Una funcion llamada posicion
	// Devuelve por consola la posicion actual de Y
	public int posicionY () 
	{
		return y;
	}

	// Una funcion llamada mueveX
	// Cambia la posicion de X
	public void mueveX (int cuanto) 
	{
		this.x += cuanto;
	}

	// Una funcion llamada mueveY
	// Cambia la posicion de Y
	public void mueveY (int cuanto) 
	{
		this.y += cuanto;
	}
}
Y esta es la clase que lo usa
/** 
UsaPunto.cs
 Una muestra de los UsaPunto de c#
 Para compilar con MS: csc UsaPunto.cs Punto.cs, ejecucion: UsaPunto.exe
 Para compilar con Mono: mcs UsaPunto.cs , ejecucion: mono UsaPunto.exe
*/

// Definicion de la clase UsaPunto
// donde creamos una instancia de la clase punto y la usamos

public class UsaPunto 
{
	// Directamente metemos la funcion principal
	// para probar el objeto punto
	public static void Main () 
	{
		// Aqui creamos la instancia de Punto.
		Punto miPunto = new Punto();
		System.Console.WriteLine("Ok, punto creado");

		// Probamos algunas funciones...
		miPunto.mueveX(6);
		miPunto.mueveY(45);

		System.Console.Write("Posicion de X: {0}, ", miPunto.posicionX());
		System.Console.WriteLine("posicion de Y: {0}", miPunto.posicionY());
	}

}
También podemos definir una clase dentro de otra. Por ejemplo, la clase Circulo y su Color.

/** 
Circulo.cs
 Una muestra de los Circulo de c#
 Para compilar con MS: csc Circulo.cs, ejecucion: Circulo.exe
 Para compilar con Mono: mcs Circulo.cs , ejecucion: mono Circulo.exe
*/

// Una clase definida dentro de otra
// El circulo y su clase color
public class Circulo 
{
	int diametro;
	public Color miColor;	
	
	// Clase Color
	public class Color 
	{
		string color;	
	
		public Color(string inicial)
		{
			this.color = inicial;
		}
		
		// Un método para cambiar el atributo color
		public void cambiaColor(string otro)
		{
			this.color = otro;
		}

		// Un método para que devuelva el color
		public string dameColor()
		{
			return this.color;
		}
		
	}// fin de clase color
	
	// Constructor de Circulo
	public Circulo (int diametroInicial, string colorInicial)
	{
		this.diametro  = diametroInicial;
		this.miColor = new Color(colorInicial);
	}
	
	// Método que devuelve el diametro
	public int dameDiametro ()
	{
		return this.diametro;
	}
	
	// Funcion o método principal para las pruebas
	public static void Main () 
	{
		// Creamos una instancia
		Circulo circulo = new Circulo(66, "verde");
		
		System.Console.WriteLine("Hemos creado un circulo");
		System.Console.WriteLine("Su diametro es: {0}", circulo.dameDiametro());
		
		// Vamos a cambiarle el color
		circulo.miColor.cambiaColor("negro");

	System.Console.WriteLine("OK, color cambiado: {0}", circulo.miColor.dameColor());

		}
	
}

by Pello Altadill 06/20/2006 10:17:49 - 2091 hits

C# día 04: control de flujo

Veamos las herramientas básicas para control de flujo, empezando por las condicionales. /** Condicionales.cs Una muestra de los Condicionales de c# Para compilar con MS: csc Condicionales.cs , ejecucion: Condicionales.exe Para compilar con Mono: mcs Condicionales.cs , ejecucion: mono Condicionales.exe */ // Importamos la libreria de utilidades básicas de sistema using System; // Definicion de la clase Condicionales, que muestra tipos de Condicionales. public class Condicionales { ...

by Pello Altadill 06/19/2006 16:37:07 - 1988 hits

More »

C# día 03: operadores

Bueno, los operadores, nada nuevo bajo el sol. Veamos los aritméticos: /** Operadores.cs Una muestra de los operadores de c# Para compilar con MS: csc Operadores.cs , ejecucion: Operadores.exe Para compilar con Mono: mcs Operadores.cs , ejecucion: mono Operadores.exe */ // Importamos la libreria de utilidades básicas de sistema using System; // Definicion de la clase Operadores, que muestra tipos de Operadores. public class Operadores { // Y aquí la función prin...

by Pello Altadill 06/18/2006 21:09:02 - 1954 hits

More »

C# día 02: tipos

Vamos a ver que tipos hay por aquí, buf los de toda la vida: /** Numeros.cs El ejemplo Para compilar con MS: csc Numeros.cs , ejecucion: Numeros.exe Para compilar con Mono: mcs Numeros.cs , ejecucion: mono Numeros.exe */ // Para documentar el codigo podemos usar etiquetas XML especificas. // Las más comunes son <example>, <exception>, <list>, <param>, // <paramref>, <permission>, <remarks>, <returns>, <see>, <seealso>, <...

by Pello Altadill 06/17/2006 22:45:12 - 2070 hits

More »

C# día 01

Pues eso, hay que currarse los 21 días. Antes de San Fermín. ¿Lo lograré? // Hola.cs // El ejemplo clasico para iniciarse en un lenguaje // Para compilar con MS: csc Hola.cs , ejecucion: Hola.exe // Para compilar con Mono: mcs Hola.cs , ejecucion: mono Hola.exe // Importamos la libreria de utilidades básicas de sistema using System; // Todo debe ir dentro de clases. En este caso // Definimos la clase Hola class Hola { // Main: Programa principal public stati...

by Pello Altadill 06/16/2006 10:10:13 - 1753 hits

More »

PHP: enviar correo con mail()

¿Quien no ha sufrido los problemas de enviar correos desde su aplicacion web? A la hora de conseguir esa funcionalidad PHP nos provee de una unica funcion y si se usa sin mas puede llevar a la frustracion por muchas causas: * Colega... ¿donde esta mi FROM? * ¿Por que me cambia el FROM por un www-data@localhost? * ¿Por que no llega el correo? En resumen, el problema que tiene esa función es que si se usa sin mas puede que funcione o p...

by Pello Altadill 04/27/2006 06:56:06 - 18111 hits

More »

Ejemplo de AJAX: Hello Dom

Bueno al menos habia que probar este combinado de tecnologias. Los usuarios de Gmail ya habreis notado que tras la aparente sencillez del interfaz ese correo web subyace un entramado de llamadas que nuestro navegador hace al servidor por debajo de la mesa. Efectivamente, olviden lo que habian aprendido hasta ahora. Los navegadores modernos son capaces de hacer peticiones a servidores web sin la tradicional recarga de la pagina. ¿Como es posible? AJAX significa Asynchronous Jav...

by Pello Altadill 03/11/2006 15:45:58 - 3149 hits

More »

No se encuentra system32/ntoskrnl.exe

Supongamos un equipo con dos particiones: 1.- Una con windows 98 o XP 2.- La otra con windows2000 o 2003 Y ahora queremos meterle un linux. Para eso habra que hacer sitio para una particion, ya sea con el partition magic, o con un liveCD con herramientas tipo parted. Puede que al instalarte un linux (una debian sarge por ejemplo), el gestor de arranque grub te detecte todas las particiones pero al intentar arrancar la windows2000 puede que te diga: El siguiente ...

by Pello Altadill 02/08/2006 13:00:22 - 6767 hits

More »

Parsear XML con PHP

Este es un ejemplo muy simple para parsear ficheros XML con PHP usando libexpat, es decir la libreria que probablemente ya tendremos soportada si PHP se compilo con la opcion --with-xml El ejemplo esta sacado del php.net pero simplificado al maximo y explicando cada paso. El modelo de parseo es tipo SAX, algo asi como un recorrido del fichero orientado a eventos (empiezo elemento, cierro elemento, contenido,..). El mecanismo consiste en crear una clase parseadora con funciones h...

by Pello Altadill 02/07/2006 09:53:59 - 3253 hits

More »