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 - танҳо методҳо ва хосиятҳо, пас аз 8.0 - инчунин ҳамроҳон статикӣ ва иҷрои пешфарзӣ
Ҳолат Мумкин аст, ки дорои ҳолат (аз тариқи майдонҳо) бошад Намебошанд ҳолатро дошта бошанд