Meer informatie over generics

Oefening 1

Hier is een oefening om te oefenen met List<T> in C#. De oefening laat je werken met een lijst van gebruikers.

Specificaties

  1. Maak een klasse User met de eigenschappen:

    • int Id
    • string Name
  2. Maak een klasse UserManager met:

    • Een List<User> als opslag voor gebruikers.
    • Een methode AddUser(int id, string name) om een gebruiker toe te voegen.
    • Een methode RemoveUser(int id) om een gebruiker te verwijderen.
    • Een methode GetAllUsers() die alle gebruikers teruggeeft.
  3. In de Main-methode:

    • Maak een UserManager-instantie aan.
    • Voeg drie gebruikers toe.
    • Toon de lijst van gebruikers.
    • Verwijder één gebruiker.
    • Toon opnieuw de lijst van gebruikers.

Verwachte output

Gebruikerslijst:
1: Alice
2: Bob
3: Charlie

Na verwijderen van gebruiker 2:
1: Alice
3: Charlie

Nu jij

using System;
using System.Collections.Generic;
 
public class User
{
    public int Id { get; set; }
    public string Name { get; set; }
 
    public User(int id, string name)
    {
        Id = id;
        Name = name;
    }
}
 
public class UserManager
{
 // jouw uitwerking
}
 
class Program
{
    static void Main()
    {
        UserManager userManager = new UserManager();
        userManager.AddUser(1, "Alice");
        userManager.AddUser(2, "Bob");
        userManager.AddUser(3, "Charlie");
 
        Console.WriteLine("Gebruikerslijst:");
        foreach (var user in userManager.GetAllUsers())
        {
            Console.WriteLine($"{user.Id}: {user.Name}");
        }
 
        userManager.RemoveUser(2);
 
        Console.WriteLine("\nNa verwijderen van gebruiker 2:");
        foreach (var user in userManager.GetAllUsers())
        {
            Console.WriteLine($"{user.Id}: {user.Name}");
        }
    }
}

Oefening 2

Je gaat een eenvoudige boekenbibliotheek maken waarin je boeken kunt toevoegen en verwijderen met behulp van een List<string>.

Specificaties

-=INITIALISEREN=- van de lijst

  • Maak een List<string> genaamd boeken.
  • Voeg minstens drie boekentitels toe aan de lijst.
    Lijst weergeven
  • Toon alle boeken in de console met een foreach-loop. Gebruikerinteractie
  • Vraag de gebruiker om een nieuwe boekentitel toe te voegen.
  • Vraag de gebruiker om een boek te verwijderen op basis van de titel. Geüpdatete lijst tonen
  • Toon de lijst opnieuw na de wijzigingen.

Verwachte output

Boeken in de bibliotheek:
- De Hobbit
- Harry Potter
- De Da Vinci Code

Voer een nieuwe boekentitel in: In de Ban van de Ring
Voer de titel in van het boek dat je wilt verwijderen: Harry Potter

Geüpdatete boekenlijst:
- De Hobbit
- De Da Vinci Code
- In de Ban van de Ring

Nu jij

using System;
using System.Collections.Generic;
 
class Program
{
    static void Main()
    {
        // Stap 1: Initialiseren van de boekenlijst
 
        // Stap 2: Lijst weergeven
 
        // Stap 3: Gebruiker voegt een boek toe
 
        // Stap 4: Gebruiker verwijdert een boek
 
        // Stap 5: Geüpdatete lijst tonen
 
    }
 
    // Hulpmethode om de boekenlijst weer te geven
    static void ToonBoeken(List<string> boeken)
    {
        if (boeken.Count == 0)
        {
            Console.WriteLine("De bibliotheek is leeg.");
        }
        else
        {
            foreach (var boek in boeken)
            {
                Console.WriteLine($"- {boek}");
            }
        }
    }
}

Oefening 3

Implementeer een generieke klasse Opslag<T> die gegevens van een willekeurig type kan opslaan en ophalen.

Specificaties

De klasse moet de volgende functionaliteiten hebben:

  1. Een methode VoegToe(T item) om een item toe te voegen.
  2. Een methode Verwijder(T item) om een item te verwijderen.
  3. Een methode ToonAlle() om alle opgeslagen items weer te geven.

Verwachte output

Toegevoegd: 10
Toegevoegd: 20
Toegevoegd: 30

Opgeslagen items:
- 10
- 20
- 30

Verwijderd: 20

Opgeslagen items:
- 10
- 30

Toegevoegd: Alice
Toegevoegd: Bob
Toegevoegd: Charlie

Opgeslagen items:
- Alice
- Bob
- Charlie

Verwijderd: Bob

Opgeslagen items:
- Alice
- Charlie

Nu jij

using System;
using System.Collections.Generic;
 
// Generieke klasse Opslag<T>
 
class Program
{
    static void Main()
    {
        // Gebruik met integers
        Opslag<int> getallenOpslag = new Opslag<int>();
        getallenOpslag.VoegToe(10);
        getallenOpslag.VoegToe(20);
        getallenOpslag.VoegToe(30);
        getallenOpslag.ToonAlle();
        getallenOpslag.Verwijder(20);
        getallenOpslag.ToonAlle();
 
        // Gebruik met strings
        Opslag<string> namenOpslag = new Opslag<string>();
        namenOpslag.VoegToe("Alice");
        namenOpslag.VoegToe("Bob");
        namenOpslag.VoegToe("Charlie");
        namenOpslag.ToonAlle();
        namenOpslag.Verwijder("Bob");
        namenOpslag.ToonAlle();
    }
}

Oefening 4

In deze oefening implementeer je een interface en een klasse implementeren met een type constraint.

Specificaties

  1. Maak een interface IEvenement met minimaal de eigenschappen:
    • string Naam
    • DateTime Datum
  2. Implementeer een klasse Evenement die IEvenement gebruikt.
  3. Maak een generieke klasse EvenementenPlanner<T>, die alleen werkt met objecten die IEvenement implementeren.
  4. Voeg methoden toe om:
    • Een evenement toe te voegen.
    • Een lijst van alle evenementen op te vragen.
    • Het eerstvolgende evenement (op datum) op te vragen.

Optioneel

  • Voeg een methode toe om alle evenementen te verwijderen die in het verleden liggen.
  • Voeg een check toe zodat er geen dubbele evenementen met dezelfde naam en datum worden toegevoegd.

Verwachte output

Alle evenementen:
Concert op 10-05-2025
Festival op 20-06-2025
Sportwedstrijd op 05-04-2025
 
Eerstvolgende evenement: Sportwedstrijd op 05-04-2025
 
Evenementen na verwijderen van oude:
Concert op 10-05-2025
Festival op 20-06-2025

Nu jij

class Program
{
    static void Main()
    {
        EvenementenPlanner<Evenement> planner = new EvenementenPlanner<Evenement>();
 
        planner.VoegToe(new Evenement("Concert", new DateTime(2025, 5, 10)));
        planner.VoegToe(new Evenement("Festival", new DateTime(2025, 6, 20)));
        planner.VoegToe(new Evenement("Sportwedstrijd", new DateTime(2025, 4, 5)));
 
        Console.WriteLine("Alle evenementen:");
        foreach (var ev in planner.GetAlleEvenementen())
        {
            Console.WriteLine($"{ev.Naam} op {ev.Datum:dd-MM-yyyy}");
        }
 
        var eerstvolgende = planner.GetEerstvolgendeEvenement();
        if (eerstvolgende != null)
        {
            Console.WriteLine($"\nEerstvolgende evenement: {eerstvolgende.Naam} op {eerstvolgende.Datum:dd-MM-yyyy}");
        }
 
        // Oude evenementen verwijderen en opnieuw tonen
        planner.VerwijderOudeEvenementen();
        Console.WriteLine("\nEvenementen na verwijderen van oude:");
        foreach (var ev in planner.GetAlleEvenementen())
        {
            Console.WriteLine($"{ev.Naam} op {ev.Datum:dd-MM-yyyy}");
        }
    }
}

Oefening 5

Vul de ontbrekende delen in om een generieke methode Wissel te implementeren die twee waarden van hetzelfde type omwisselt.

Specificaties

  • Vul de ontbrekende delen in (__________) om de generieke methode correct te implementeren.
  • Test de methode met verschillende gegevenstypes, zoals double, string, etc.

Verwachte output

Voor wisselen: x = 5, y = 10  
Na wisselen: x = 10, y = 5  

Nu jij

using System;
 
class Program
{
    // Definieer hier een generieke methode Wissel die twee waarden omwisselt
    static void ____________(ref T a, ref T b)
    {
        ______ temp = a;
        a = __;
        b = temp;
    }
 
    static void Main()
    {
        int x = 5, y = 10;
        Console.WriteLine($"Voor wisselen: x = {x}, y = {y}");
        
        // Roep hier de generieke Wissel-methode aan
        Wissel(__________);
        
        Console.WriteLine($"Na wisselen: x = {x}, y = {y}");
    }
}