Ejercicio eventos

Vamos a crear  una clase CuentaCorriente con un saldo privado de tipo moneda. Creamos una propiedad pública para este saldo .

Tendrá una propiedad publica credito de tipo moneda.

Creamos un delegado que no devuelve nada y tiene un parámetro moneda.

Creamos dos eventos: limite y descubierto.

En el setter del saldo si el saldo es menor o igual que el crédito se lanza el evento limite.

Si el saldo es menor que cero lanzamos el evento descubierto (y no el del límite)

Creamos una cuenta en el program y comprobamos que funcione.

Eventos

Cuando ocurre algo interesante, los eventos habilitan una clase u objeto para notificarlo a otras clases u objetos. La clase que envía (o genera) el evento recibe el nombre de publicador y las clases que reciben (o controlan) el evento se denominan suscriptores.

En una aplicación web o una aplicación de Windows Forms en C# típica, se puede suscribir a eventos generados por controles, como botones y cuadros de lista.

https://docs.microsoft.com/es-es/dotnet/csharp/programming-guide/events/

https://www.tutorialsteacher.com/csharp/csharp-event

Events in C#

Ejercicio Action, Func y Predicate

Vamos a modificar la clase ‘Fiesta’ para que en vez de utilizar que la nota sea mayor de 5 podamos ‘inyectar’ un Predicate que tomando como valor la nota nos devuelva si se añade o no.

Así mismo añadiremos un método Juego que aplicará a todos los participantes de la fiesta el método que le pasemos como parámetro que será un Action que tome un parámetro String.

Crearemos un método que tomará como parámetro una función que toma como parámetros un string y un int y devuelve un string y lo aplicará a todos los alumnos de la fiesta.

Ejercicio delegados

Vamos a crear un delegado al que le pasemos un double y devuelva un double.

Crearemos una función circunferencia que nos devuelva la circunferencia de un radio dado, una areaCirculo que nos devuelva el área de un círculo de un radio dado y otra volumenEsfera que nos devuelva el volumen de una esfera de un radio dado.

Crear una lista de double con valores (1,2,4) y un bucle que, utilizando delegados, nos imprima la circunferencia, area y volumenes.

Delegados

Un delegado es un tipo que encapsula de forma segura un método, similar a un puntero de función en C y C++. A diferencia de los punteros de función de C, los delegados están orientados a objetos, proporcionan seguridad de tipos y son seguros. El tipo de un delegado se define por el nombre del delegado.

https://docs.microsoft.com/es-es/dotnet/csharp/programming-guide/delegates/using-delegates

https://www.tutorialspoint.com/csharp/csharp_delegates.htm

https://steven-giesel.com/blogPost/aa77f7fb-41a7-47d2-8e48-ef9e101cf08e

https://www.tutorialsteacher.com/csharp/csharp-delegates

Ejercicio indexers

Vamos a reaprovechar la clase Alumno que teníamos con nombre y Nota

Crearemos una clase Fiesta que tendrá una lista de alumnos.

Vamos a tener un indexador que nos devolverá el alumno en esa posición y si asignamos nos pondrá el alumno en esa posición. Si la posición no existe lo añade al final.

Vamos a tener un indexador por string que nos busque el nombre del alumno y nos devolverá la posición del primer alumno con ese nombre.

Vamos a tener un indexador por string y nota que nos busque el nombre del alumno y nos devolverá la posición del primer alumno con ese nombre y esa nota.

En el indexador, cuando añadimos un alumno, si está suspendido no lo añadimos porque no tiene derecho a estar en la fiesta.

 

C# indexadores (indexer)

Los indizadores permiten indizar las instancias de una clase o struct como matrices. El valor indizado se puede establecer o recuperar sin especificar explícitamente un miembro de tipo o de instancia. Son similares a propiedades, excepto en que sus descriptores de acceso usan parámetros.

https://docs.microsoft.com/es-es/dotnet/csharp/programming-guide/indexers/

https://www.tutorialsteacher.com/csharp/csharp-indexer

https://www.tutorialspoint.com/csharp/csharp_indexers.htm

Ejercicio extensiones

Vamos a crear un par de extensiones para el tipo String:

Extensión BestTrim: Nos elimina los espacios del principio y del final y en medio de la cadena si hay dos o más espacios seguidos los sustituye por uno

Extensión Leet: Nos convierte una cadena a https://es.wikipedia.org/wiki/Escritura_leet

Extensión ToTitle: Nos pone en mayúsculas las primeras letras de cada palabra y minúsculas las demás.