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.

Extensiones

Los métodos de extensión permiten «agregar» métodos a los tipos existentes sin crear un nuevo tipo derivado, recompilar o modificar de otra manera el tipo original. Los métodos de extensión son métodos estáticos, pero se les llama como si fueran métodos de instancia en el tipo extendido. En el caso del código de cliente escrito en C#, F# y Visual Basic, no existe ninguna diferencia aparente entre llamar a un método de extensión y llamar a los métodos definidos en un tipo.

 

https://docs.microsoft.com/es-es/dotnet/csharp/programming-guide/classes-and-structs/extension-methods

https://www.tutorialsteacher.com/csharp/csharp-extension-method

Ejercicio campeonato

Vamos a hacer una clase que organice campeonatos.

Será de tipo genérico porque podremos usar Equipos, Jugadores, etc.

Podemos añadir tantos elementos como queramos.

Crearemos un método Organizar que:

  1. Compruebe que el número de equipos sea potencia de 2 (4,8,16,32…)
  2. Desordene los elementos para que no tenga que ver como se han introducido.
  3. Cree los enfrentamientos dos a dos y el árbol de las rondas

Ilustración de Soporte De Torneo De Eliminación Única De Campeonato  Vectorial O Diagrama De Árbol En Color Azul Aislado Sobre Un Fondo Blanco  Campos Para Ocho Jugadores O Equipos Es Adecuado Para

Tipos genéricos propios

Los genéricos presentan el concepto de parámetros de tipo en .NET, lo que permite diseñar clases y métodos que aplazan la especificación de uno o varios tipos hasta que el código de cliente declara y crea instancias de la clase o método.

También puede crear métodos y tipos genéricos personalizados para proporcionar sus propias soluciones generalizadas y patrones de diseño que sean seguros para tipos y eficaces.

El parámetro de tipo T se usa en diversas ubicaciones donde normalmente se usaría un tipo concreto para indicar el tipo del elemento almacenado en la lista. Se usa de estas formas:

  • Como el tipo de un parámetro de método en el método AddHead.
  • Como el tipo de valor devuelto de la propiedad Data en la clase anidada Node.
  • Como el tipo de miembro privado data de la clase anidada.

https://docs.microsoft.com/es-es/dotnet/csharp/fundamentals/types/generics

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

Generics in C#

Ejercicio Agenda

Vamos a crear una agenda de teléfonos. Crearemos la clase Agenda y utilizaremos un SortedList<string,string).

Tendremos los siguientes métodos:

agregarContacto(nombre,telefono) Añade el nombre a la agenda, si ya está cambia el número

quitarContacto(nombre) Elimina el nombre y el número de la agenda

telefono(nombre) Nos devuelve el teléfono de ese contacto

nombre(telefono) Nos devuelve el nombre del contacto que tenga ese teléfono

repetidos() Nos devuelve una lista con los contactos que tengan el mismo teléfono (List de string con los nombres)

Sobreescribiremos el método toString para que nos muestre toda la agenda.