Gå til indholdet

N268 Hændelser (Terning / Events)

Du skal skabe en tom konsol app med en klasse Terning som følger:

class Terning
{
    public int Værdi { get; private set; }
    private Random random;

    public void Ryst() { 
        Værdi = random.Next(1,7);
    }

    public void Skriv() {
        Console.WriteLine($"[ {this.Værdi} ]");
    }

    public Terning()
    {
        random = new Random();
        Ryst();
    }
}

Din opgave er at:

  • Tilføje to hændelser til Terning klassen: ErRystet, som har et argument der repræsenterer den rystede værdi, og ErSekser, som ikke har nogen argumenter. Disse hændelser skal udløses i Ryst metoden som beskrevet.

Herefter skal du prøve terningen godt af - eksempelvis med dette:

Terning t = new Terning();

// Abonner på hændelserne
t.ErRystet += (værdi) => Console.WriteLine($"Terningen er rystet til {værdi}");
t.ErSekser += () => Console.WriteLine("Terningen er en sekser!");

// Test terningen
for (int i = 0; i < 10; i++)
{
    t.Ryst();
    t.Skriv();
}
Klik for at se et forslag til en løsning
class Terning
{
    public int Værdi { get; private set; }
    private Random random;

    // Deklaration af hændelser
    public event Action<int> ErRystet;
    public event Action ErSekser;

    public void Ryst() { 
        Værdi = random.Next(1,7);
        // Udløser ErRystet hændelsen
        ErRystet?.Invoke(Værdi);
        // Tjekker om værdien er en sekser og udløser ErSekser hændelsen
        if (Værdi == 6) {
            ErSekser?.Invoke();
        }
    }

    public void Skriv() {
        Console.WriteLine($"[ {this.Værdi} ]");
    }

    public Terning()
    {
        random = new Random();
        Ryst();
    }
}