Complete these tasks to reinforce what you learned in this module.
Lager soll seine Empfänger nicht mehr kennen.
Gib der Klasse ein Event MindestbestandUnterschritten vom Typ EventHandler<BestandArgs>, das ausgelöst wird, sobald der Bestand eines Artikels nach einer Entnahme unter 10 liegt. Entnehme selbst darf keinen Empfänger mehr aufrufen.
In Main melden sich zwei Beobachter an — eine Nachbestellung und ein Protokoll — und zwar in dieser Reihenfolge. Danach werden nacheinander 5, dann 4 und dann 3 Schrauben entnommen; der Startbestand beträgt 15.
MindestbestandUnterschritten?.Invoke(this, new BestandArgs { ... }) — das ?. ist nötig, weil ein Event ohne Abonnenten null ist. Nach der ersten Entnahme sind es 10, und 10 ist nicht *unter* 10.using System;
using System.Collections.Generic;
public sealed class BestandArgs : EventArgs
{
public BestandArgs(string artikel, int bestand)
{
Artikel = artikel;
Bestand = bestand;
}
public string Artikel { get; private set; }
public int Bestand { get; private set; }
}
public sealed class Lager
{
private readonly Dictionary<string, int> _bestand = new Dictionary<string, int>();
// TODO: event EventHandler<BestandArgs> MindestbestandUnterschritten
public void Lege(string artikel, int menge) => _bestand[artikel] = menge;
public void Entnehme(string artikel, int menge)
{
_bestand[artikel] -= menge;
// TODO: unter 10 -> Event auslösen
}
}
class Program
{
static void Main()
{
var lager = new Lager();
lager.Lege("schrauben", 15);
// TODO: erst die Nachbestellung anmelden:
// "Nachbestellung: {Artikel} (Bestand {Bestand})"
// TODO: dann das Protokoll:
// "Protokoll: {Artikel} auf {Bestand}"
lager.Entnehme("schrauben", 5);
lager.Entnehme("schrauben", 4);
lager.Entnehme("schrauben", 3);
}
}