N265 Abstrakt klasse
Du skal oprette en tom konsolapplikation med en abstrakt klasse (så kan man ikke skabe en instans) kaldet Invoice
. Klassen skal have følgende medlemmer:
- En offentlig egenskab
Amount
(decimal) med et privat felt, som repræsenterer det samlede fakturabeløb. - En offentlig egenskab
Description
(string) for at beskrive fakturaen. - En abstrakt metode
CalculateTotal()
uden implementering, der skal beregne det samlede beløb. - En metode
Display()
der skal vise faktura med de tre egenskaber (se evt løsning for eksempel)
Skab en ny konkret klasse StandardInvoice
, der nedarver fra Invoice
. Klassen skal have følgende medlemmer:
- En implementering af
CalculateTotal()
-metoden, hvor moms beregnes som 25 % af fakturabeløbet.
Skab en konkret klasse NoVATInvoice
, der nedarver fra Invoice
. Klassen skal have følgende medlemmer:
- En implementering af
CalculateTotal()
-metoden, hvor moms beregnes som 0 % af fakturabeløbet.
Prøv begge klasser af i Main.
Klik for at se et forslag til en løsning
public abstract class Invoice
{
private decimal amount;
// Offentlig egenskab for beløb
public decimal Amount
{
get { return amount; }
set { amount = value > 0 ? value : 0; }
}
// Offentlig egenskab for beskrivelse
public string? Description { get; set; }
// Abstrakt metode til at beregne det samlede beløb
public abstract decimal CalculateTotal();
public void Display()
{
Console.WriteLine($"Description: {Description}");
Console.WriteLine($"Amount: {Amount:C}");
Console.WriteLine($"Total (with VAT): {CalculateTotal():C}");
}
}
// Konkret implementering af faktura
public class StandardInvoice : Invoice
{
// Implementerer CalculateTotal() med 25% moms
public override decimal CalculateTotal()
{
return Amount * 1.25m; // Beregn moms (25 %)
}
}
public class NoVATInvoice : Invoice
{
// Implementerer CalculateTotal() med 25% moms
public override decimal CalculateTotal()
{
return Amount;
}
}
// Brug af fakturaklassen
class Program
{
static void Main()
{
StandardInvoice invoice = new StandardInvoice
{
Description = "Service Fee",
Amount = 1000.00m
};
invoice.Display();
NoVATInvoice invoice2 = new NoVATInvoice
{
Description = "Service Fee",
Amount = 1000.00m
};
invoice2.Display();
}
}