Middle
Որ դեպքերում պետք է օգտագործել ինտերֆեյս և որ դեպքերում՝ աբստրակտ դաս?
sobes.tech AI
Պատասխան AI-ից
Օգտագործեք ինտերֆեյսները՝ վարքագծի պայմանագիր սահմանելու համար, որը կարող են իրականացնել դասերը: Սա թույլ է տալիս հասնել պոլիմորֆիզմի և թուլացնել դասերի միջև կապը: Դասը կարող է ունենալ մի քանի ինտերֆեյս, բայց միայն մեկ հիմնական դաս:
Օգտագործեք աբստրակտ դասեր, երբ ունեք ընդհանուր իրականացում մասի ֆունկցիոնալության և ցանկանում եք տրամադրել հիմնական կառուցվածք դուստր դասերի համար: Աբստրակտ դասերը կարող են պարունակել աբստրակտ և սովորական մեթոդներ, ինչպես նաև դաշտեր: Դրանք հարմար են, երբ անհրաժեշտ է ժառանգել "է":
| Գծանշում | Ինտերֆեյս | Աբստրակտ դաս |
|---|---|---|
| Բազմաթիվ ժառանգություն | Այո | Ոչ |
| Ինտերֆեյսի իրականացում | Ոչ (մինչ .NET 8-ը՝ նախնական ինտերֆեյսի մեթոդներով) | Այո, մասնակի կամ լրիվ |
| Դաշտեր | Ոչ | Այո |
| Կոնստրուկտորներ | Ոչ | Այո |
| Հարաբերության տեսակ | "կարող է անել" ("has-a") | "է" ("is-a") |
Օրինակ՝ ինտերֆեյսի օգտագործման:
// Դիտարկում ենք պայմանագիր այն օբյեկտների համար, որոնք կարող են թռչել
public interface IFlyable
{
void Fly();
}
// Օբյեկտի դասը իրականացնում է IFlyable ինտերֆեյսը
public class Airplane : IFlyable
{
public void Fly()
{
// Օբյեկտի թռիչքի իրականացում
Console.WriteLine("Ավիաութո թռչում է");
}
}
// Այլ դաս՝ թռչող օբյեկտ
public class Bird : IFlyable
{
public void Fly()
{
// Թռչելու իրականացում
Console.WriteLine("Թռչուն թռչում է");
}
}
Օրինակ՝ աբստրակտ դասի օգտագործում:
// Աբստրակտ դաս՝ կենդանի օրգանիզմ, ընդհանուր շնչառության իրականացումով
public abstract class Animal
{
public void Breathe()
{
Console.WriteLine("Կենդանին շնչում է");
}
// Աբստրակտ մեթոդ՝ որը պետք է իրականացնել ժառանգորդները
public abstract void MakeSound();
}
// կոնկրետ դաս՝ շուն, ժառանգորդ Animal-ից
public class Dog : Animal
{
public override void MakeSound()
{
Console.WriteLine("Հավ!");
}
}
// կոնկրետ դաս՝ կատու, ժառանգորդ Animal-ից
public class Cat : Animal
{
public override void MakeSound()
{
Console.WriteLine("Մյու!");
}
}