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, ogErSekser
, som ikke har nogen argumenter. Disse hændelser skal udløses iRyst
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();
}
}