Sobes.tech
Junior

Vai esat izmantojis abstraktās klases savos projektos?

sobes.tech AI

Atbilde no AI

Jā, es izmantoju. Abstraktās klases tika izmantotas, lai izveidotu galvenās struktūras ar kopīgiem metodēm un īpašībām, kuras pēc tam manto konkrētas klases.

// Abstraktās klases deklarācija
public abstract class Shape
{
    // Abstrakts metodes, kas jāīsteno mantojošajās klasēs
    public abstract double GetArea();

    // Vērtējams metodes ar noklusējuma īstenojumu, kuru var pārdefinēt
    public virtual void Draw()
    {
        Console.WriteLine("Zīmēšanas forma.");
    }
}

// Konkrēta klase, kas manto no Shape
public class Circle : Shape
{
    public double Radius { get; set; }

    public Circle(double radius)
    {
        Radius = radius;
    }

    // Abstraktās metodes īstenošana
    public override double GetArea()
    {
        return Math.PI * Radius * Radius;
    }

    // Pārdefinēt vērtējamu metodi
    public override void Draw()
    {
        Console.WriteLine($"Zīmē apļa ar rādiusu {Radius}.");
    }
}

Galvenie scenāriji:

  • Kopējā līguma noteikšana: Abstraktās klases ļauj noteikt metožu un īpašību kopumu, kas jābūt visās mantojošajās klasēs.
  • Daļēja īstenošana: Iespēja nodrošināt daļēju īstenošanu galvenajā klasē, izvairoties no koda pilnīgas dublēšanas mantojošajās klasēs.
  • Modeļa šablons: Bieži tiek izmantots modeļa šablonu īstenošanā, piemēram, "Šablona metode".

Atšķirības no saskarnēm:

Īpašība Abstraktā klase Saskarne
Mantošana Daudzmantošana ir aizliegta Daudzmantošana ir atļauta
Īstenošana Var saturēt metožu īstenošanu Līdz C# 8.0 - tikai deklarācijas, pēc 8.0 - noklusējuma īstenošana
Locekļi Var saturēt laukus, konstruktorus, virtuālus/abstraktus/parastus metodes Līdz C# 8.0 - tikai metodes un īpašības, pēc 8.0 - arī statiskie locekļi un noklusējuma īstenojumi
Stāvoklis Var saturēt stāvokli (caur laukiem) Nevar saturēt stāvokli