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:
- Opret den abstrakte klasse
Invoice
med de nødvendige egenskaber (Amount somdecimal
og Description somstring
) og en abstrakt metodeCalculateTotal()
. - Implementer to afledte klasser,
StandardInvoice
ogNoVATInvoice
, som begge nedarver fraInvoice
. - Skab en liste af
Invoice
-objekter, der indeholder begge typer fakturaer. - 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}");
}
}
}