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 {Radius}.");
}
}
Հիմնական սցենարներ:
- Ընդհանուր պայմանագրի սահմանում: Աբստրակտ դասերը թույլ են տալիս սահմանել մեթոդների և հատկությունների հավաքածու, որոնք պետք է լինեն բոլոր ժառանգական դասերում:
- Հատուկ իրագործում: Հնարավորություն է տրամադրել մասնակի իրագործում հիմնական դասում՝ խուսափելով կոդի լրացուցիչ կրկնությունից ժառանգական դասերում:
- Նմուշ: Օգտագործվում է օրինակների, ինչպիսիք են "Նմուշային մեթոդ" ձևավորման ձևանմուշները:
Տարբերությունները ինտերֆեյսներից:
| Գծանշում | Աբստրակտ դասը | Ինտերֆեյսը |
|---|---|---|
| Ներառում | Միջնորդական ժառանգությունը արգելված է | Միջնորդական իրագործումը թույլատրված է |
| Իրագործում | Կարող է պարունակել մեթոդների իրագործում | Մինչ C# 8.0 - միայն հայտարարություններ, հետո - նախնական իրագործում |
| Անդամներ | Կարող է ունենալ դաշտեր, կոնստրուկտորներ, վիրտուալ/աբստրակտ/հիմնական մեթոդներ | Մինչ C# 8.0 - միայն մեթոդներ և հատկություններ, հետո - նաև ստատիկ անդամներ և նախնական իրագործումներ |
| Կարգավիճակ | Կարող է ունենալ վիճակ (դաշտերով) | Չեն կարող ունենալ վիճակ |