Sobes.tech
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("Մյու!");
    }
}