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 |