Complete these tasks to reinforce what you learned in this module.
Diese Klasse verspricht nichts — jeder darf alles verändern:
``csharp
public class Warenkorb
{
public List<Position> Positionen { get; set; }
public decimal Gesamtbetrag { get; set; }
}
Bau sie so um, dass ein existierender Warenkorb immer gültig ist:
- Die Positionen liegen in einem privaten Feld und sind nach aussen nur als IReadOnlyList<Position> lesbar.
- Gesamtbetrag hat keinen Setter, sondern wird aus den Positionen berechnet.
- FuegeHinzu wirft eine ArgumentOutOfRangeException, wenn die Menge kleiner als 1 ist.
Main` legt zwei gültige Positionen an, versucht danach eine mit Menge 0 und gibt Anzahl und Summe vor und nach dem Fehlversuch aus.
Gesamtbetrag ist eine berechnete Eigenschaft: get { … } über die Positionen summieren, kein Feld. Für die Ausgabe: summe.ToString("0.00", CultureInfo.InvariantCulture). Die Mengenprüfung gehört an den Anfang von FuegeHinzu, vor das Add — sonst landet die ungültige Position doch in der Liste.using System;
using System.Collections.Generic;
using System.Globalization;
public sealed class Position
{
public Position(int menge, decimal einzelpreis)
{
Menge = menge;
Einzelpreis = einzelpreis;
}
public int Menge { get; private set; }
public decimal Einzelpreis { get; private set; }
}
public sealed class Warenkorb
{
// TODO: privates Feld List<Position>
// TODO: public IReadOnlyList<Position> Positionen — nur lesbar
// TODO: public decimal Gesamtbetrag — berechnet, kein Setter
public void FuegeHinzu(Position position)
{
// TODO: Menge < 1 -> ArgumentOutOfRangeException("position", "Menge muss positiv sein")
// TODO: sonst hinzufügen
}
}
class Program
{
static string F(decimal betrag)
{
return betrag.ToString("0.00", CultureInfo.InvariantCulture);
}
static void Bericht(Warenkorb korb)
{
// TODO: "Positionen: {n}" und "Summe: {betrag}"
}
static void Main()
{
var korb = new Warenkorb();
korb.FuegeHinzu(new Position(2, 10.00m));
korb.FuegeHinzu(new Position(3, 5.00m));
Bericht(korb);
// TODO: Position mit Menge 0 versuchen, Meldung der Ausnahme ausgeben
Bericht(korb);
}
}