Sobes.tech
Junior

თქვენ გამოიყენეთ აბსტრაქტული კლასი თქვენს პროექტებში?

sobes.tech AI

პასუხი AI-სგან

დიახ, გამოვიყენე. აბსტრაქტული კლასები გამოიყენებოდა ძირითად სტრუქტურების შექმნისთვის საერთო მეთოდებით და თვისებებით, რომლებიც შემდეგ მემკვიდრე კონკრეტული კლასების მიერ ირჩევა.

// აბსტრაქტული კლასის გამოცხადება
public abstract class Shape
{
    // აბსტრაქტული მეთოდი, რომელიც უნდა განხორციელდეს მემკვიდრე კლასებში
    public abstract double GetArea();

    // ვირტუალური მეთოდი წინასწარი განხორციელებით, რომელიც შეიძლება გადახედოს
    public virtual void Draw()
    {
        Console.WriteLine("ფორმის ხატვა.");
    }
}

// კონკრეტული კლასი, რომელიც მემკვიდრეობს Shape-ს
public class Circle : Shape
{
    public double Radius { get; set; }

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

    // აბსტრაქტული მეთოდის განხორციელება
    public override double GetArea()
    {
        return Math.PI * Radius * Radius;
    }

    // ვირტუალური მეთოდის გადახედვა
    public override void Draw()
    {
        Console.WriteLine($"ხატვა წრეზე რადიუსით {Radius}.");
    }
}

ძირითადი სცენარები:

  • საერთო კონტრაქტის განსაზღვრა: აბსტრაქტული კლასები საშუალებას აძლევს განსაზღვრონ მეთოდებისა და თვისებების ნაკრები, რომლებიც უნდა არსებობდეს ყველა მემკვიდრე კლასში.
  • შესაბამისი განხორციელება: შესაძლებლობაა მიაწოდოს ნაწილობრივი განხორციელება ძირითადი კლასში, რაც თავიდან აცილებს კოდის სრული დუბლიკაციას მემკვიდრე კლასებში.
  • პატერნი: ხშირად გამოიყენება დიზაინის ნიმუშებში, როგორიცაა "პატერნი მეთოდი".

სხვაობები ინტერფეისებთან:

მახასიათებელი აბსტრაქტული კლასი ინტერფეისი
მემკვიდრეობა მრავალმემკვიდრეობა აკრძალულია მრავალშრიანი განხორციელება დაშვებულია
განხორციელება შეიძლება შეიცავდეს მეთოდების განხორციელებას C# 8.0-მდე - მხოლოდ განცხადებები, 8.0-დან - წინასწარი განხორციელება
წევრები შეიძლება ჰქონდეს ველები, კონსტრუქტორები, ვირტუალურ/აბსტრაქტ/სადამსახურო მეთოდები C# 8.0-მდე - მხოლოდ მეთოდები და თვისებები, შემდეგ - ასევე სტატიკური წევრები და დეფოლტ რეალიზაციები
სტატუსი შეიძლება ჰქონდეს მდგომარეობა (ველებით) არ შეიძლება ჰქონდეს მდგომარეობა