Bienvenidos al curso de C#.

En este primer ejemplo se ha construido una sencilla aplicacin de gestin bancaria. Se pueden crear cuentas y aadirle clientes, que pasan a ser titulares de dichas cuentas.
Tambin pueden cancelarse cuentas y bloquearse.

Resulta interesante la clase Cuenta, que representa una cuenta bancaria. Las cuentas bancarias se identifican con 20 dgitos (4 de la entidad, 4 de la sucursal, 2 del dgito de control y 10 del cdigo cuenta cliente):
1) El cdigo de entidad (mEntidad) es el mismo para todas las cuentas del banco, por lo que lo declaramos como static.
2) El dgito de control es un valor calculado, que depende de los otros 18 dgitos, por lo que no lo declaramos como un campo, sino como una "propiedad". Las propiedades son un concepto que existe en C# pero no en Java. Una propiedad viene a ser un mtodo que permite recuperar un valor o asignar un valor, pero que no toma parmetros. Por ejemplo, para recuperar y asignar el cdigo de sucursal de una Cuenta podemos crear o bien estos mtodos...

public String getSucursal() { 
	return mSucursal; 
}

public void setSucursal(String s) {
	mSucursal=s;
}

...o bien esta propiedad:

public String sucursal {
	get { return mSucursal; }
	set { mSucursal=value; }
}

En el caso de los mtodos, y suponiendo que tenemos una instancia c de clase Cuenta, la forma de uso es: String x=c.getSucursal() o c.setSucursal("1234"). Al usar propiedades, las instrucciones equivalentes son String x=c.sucursal o c.sucursal="1234";

El tipo de la propiedad (String, en el ejemplo) representa tanto el tipo del valor de retorno como el tipo del valor que asignamos. La palabra "value" es una palabra reservada, cuyo tipo es tambin el del tipo declarado para la propiedad.

Una ventaja importante de usar propiedades frente a mtodos es que, en tiempo de desarrollo y pruebas, el depurador muestra el valor de las propiedades, pero no el de los mtodos. 

Tanto la parte get como la set de una propiedad pueden constar de muchas lneas de cdigo que hagan, p.ej., clculos complejos. Como muestra, vase el cdigo de la propiedad "saldo" en Cuenta. Obsrvese tambin que "saldo" es una propiedad de slo lectura: tiene get, pero no set. Tambin es interesante la propiedad cancelada: devuelve true si la cuenta tiene una fecha de cancelacin, y false en caso contrario. 


Cambiando de tema, la aplicacin arranca desde la ventana FMenu, que es un contenedor de formularios. Para esto, hemos puesto su propiedad IsMdiContainer a true. Las instancias de la ventana FCuenta son formularios contenidos en FMenu. Para ello, el constructor de FCuenta toma un parmetro de tipo FMenu que asignamos, en el constructor de FCuenta, a la propiedad MdiParent de Form. Es decir:

		public FCuenta(FMenu padre)   // Las ventanas tipo FCuenta se crean desde un FMenu, que pasamos como parmetro.
		{
			...

			this.MdiParent=padre;	// Le decimos a la ventana tipo FCuenta que esta ventana est contenida en una FMenu.
			...
		}

Adems, hemos aadido un campo mCuenta de tipo Cuenta a FCuenta, de manera que este mCuenta representa la cuenta sobre la que se realizan las operaciones desde esta ventana.