En este examen encontrarás cinco ejercicios de nivel avanzado que cubren conceptos como genéricos con restricciones, LINQ, eventos, programación asíncrona y reflexión. Cada enunciado va seguido de su solución completa en C# para que puedas comparar tu implementación.
1. Pila genérica con restricción y método Máximo
Enunciado:
Implementa una clase genérica BoundedStack<T> que:
- Permita almacenar elementos de tipo
T, obligando queT : IComparable<T>. - Ofrezca métodos
Push(T item),T Pop()yT Peek(). - Incorpore un método
T Max()que devuelva el elemento mayor actualmente almacenado en la pila. - Lance
InvalidOperationExceptionsi se llama aPop,PeekoMaxcuando la pila está vacía.

Solución:
2. Consultas LINQ avanzadas sobre objetos
Enunciado:
Dada la clase Estudiante { string Nombre; string Curso; double[] Notas; }, escribe un programa que:
- Genere una lista de al menos 8 estudiantes con cursos “Matemáticas”, “Física” y “Literatura”.
- Obtenga los 3 estudiantes con mayor promedio, independientemente de su curso.
- Agrupe a todos los estudiantes por curso y muestre, para cada curso, el promedio general de sus alumnos.
Solución:

3. Implementación del patrón Observer con eventos
Enunciado:
Crea una clase Thermometer que:
- Exponga un evento
TemperatureChangedde tipoEventHandler<TemperatureChangedEventArgs>. - Tenga propiedad
double Temperature. Al cambiarla, dispare el evento con el valor antiguo y el nuevo.
Define TemperatureChangedEventArgs con OldTemperature y NewTemperature. Luego, en Main, crea un termómetro y suscribe dos manejadores:
- Uno que muestre en consola el cambio.
- Otro que escriba en un log (simulado con
List<string>).
Solución:

4. Descarga asíncrona de múltiples URLs
Enunciado:
Escribe un programa que:
- Lea del usuario N URLs.
- Use
HttpClientyasync/awaitpara descargarlas todas en paralelo. - Informe, para cada URL, cuántos bytes se han descargado y el tiempo que tardó.
- Maneje excepciones individuales sin abortar las demás descargas.
Solución:

5. Reflexión para invocar métodos con atributo custom
Enunciado:
Define un atributo RunMeAttribute : Attribute. Luego, en un ensamblado cualquiera, habrá varias clases con métodos estáticos marcados con [RunMe] y sin parámetros.
- Usa reflexión para:
- Cargar el ensamblado actual.
- Buscar todos los métodos públicos estáticos sin parámetros que tengan el atributo
RunMeAttribute. - Invócalos en tiempo de ejecución.
- Muestra el nombre de cada método invocado.
Solución:

¿QUÉ TE HA PARECIDO EL ARTÍCULO? Danos tu opinión al final de la página.
Deja tu comentario y ayúdanos a crecer.
¡SÍGUENOS EN TUS REDES FAVORITAS!
AYUDANOS A CRECER Y QUE LLEGUEMOS A TODAS LAS PERSONAS QUE NOS NECESITANA. SÍGUENOS EN TUS REDES.
Entra AQUÍ y elíge donde seguirnos.

NUESTRAS ÚLTIMAS PUBLICACIONES
- Propuestas de actividades avanzadas con XML, DTD, XPath y XSLT
- Apuntes extensos de XML y XSLT
- El momento IDEAL para impulsar tu FORMACIÓN y alcanzar tus Metas Académicas: LAS NAVIDADES.

- 20 ejercicios de funciones avanzadas en Python (al estilo de Ackermann)
- Cómo guardar una página web completa en MySQL con PHP (urlencode, BLOB y otras técnicas)
- 60 ejercicios de funciones recursivas en Python para la carrera de Informática
- SIMULACRO 2 – FP Programación de Videojuegos
- Simulacro de examen – FP Programación de Videojuegos
- ALERTA METEOROLÓGICA

ELIGE TU RED FAVORITA Y SÍGUENOS.
AYUDANOS A CRECER Y A LLEGAR A TODAS LAS PERSONAS QUE NOS NECESITAN.
Contenido restringido





































































































































































































































































INFORMACIÓN SOBRE 







Comments are closed