Gå til indholdet

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();

    }
}