Gå til indholdet

N266 Polymorfisk liste

Du skal skabe en tom konsolapplikation, hvor en abstrakt klasse Invoice defineres som en overordnet klasse for to afledte klasser: StandardInvoice (med moms) og NoVATInvoice (uden moms). Opgaven består af følgende trin:

  1. Opret den abstrakte klasse Invoice med de nødvendige egenskaber (Amount som decimal og Description som string) og en abstrakt metode CalculateTotal().
  2. Implementer to afledte klasser, StandardInvoice og NoVATInvoice, som begge nedarver fra Invoice.
  3. Skab en liste af Invoice-objekter, der indeholder begge typer fakturaer.
  4. Anvend en foreach-løkke til at gennemløbe listen og udskriv den samlede fakturasum for hver faktura.
Klik for at se et forslag til en løsning
// Abstrakt fakturaklasse
public abstract class Invoice
{
    public string Description { get; set; }
    public decimal Amount { get; set; }

    // Abstrakt metode til at beregne det samlede beløb
    public abstract decimal CalculateTotal();
}

// Konkret fakturaklasse med moms
public class StandardInvoice : Invoice
{
    public override decimal CalculateTotal()
    {
        return Amount * 1.25m; // Inkluder 25% moms
    }
}

// Konkret fakturaklasse uden moms
public class NoVATInvoice : Invoice
{
    public override decimal CalculateTotal()
    {
        return Amount; // Ingen moms
    }
}

// Hovedprogram
class Program
{
    static void Main()
    {
        // Opret en liste af Invoice-objekter
        List<Invoice> invoices = new List<Invoice>
        {
            new StandardInvoice { Description = "Service Fee", Amount = 1000.00m },
            new NoVATInvoice { Description = "Consulting", Amount = 800.00m },
            new StandardInvoice { Description = "Development", Amount = 2000.00m }
        };

        // Gennemløb listen og udskriv fakturasum for hver faktura
        foreach (Invoice invoice in invoices)
        {
            Console.WriteLine($"{invoice.Description} - Total: {invoice.CalculateTotal():C}");
        }
    }
}