Sobes.tech
Middle

Qaysi hollarda interfeysni ishlatish kerak va qaysi hollarda abstrakt sinfni?

sobes.tech AI

AIdan javob

Interfeyslarni harakat shartnomasi aniqlash uchun foydalaning, bu sinflar uni amalga oshirishi mumkin. Bu polimorfizmga erishishga imkon beradi va sinflar o'rtasidagi bog'liqlikni kamaytiradi. Bir sinf bir nechta interfeysga ega bo'lishi mumkin, lekin faqat bitta asosiy sinf.

Agar siz umumiy funksionallikni amalga oshirishga ega bo'lsangiz va voris sinflar uchun asosiy tuzilmani taqdim qilishni istasangiz, abstrakt sinflardan foydalaning. Abstrakt sinflar abstrakt va oddiy metodlar hamda maydonlarni o'z ichiga olishi mumkin. Ular "bor" bo'lishi kerak bo'lgan meros olish uchun mos keladi.

Xususiyat Interfeys Abstrakt sinf
Ko'p meros olish Ha Yo'q
Amalga oshirish Yo'q ( .NET 8 ga qadar standart interfeys metodlari bilan) Ha, qisman yoki to'liq
Maydonlar Yo'q Ha
Konstruktorlar Yo'q Ha
Aloqa turi "qila oladi" ("has-a") "bo'ladi" ("is-a")

Interfeysdan foydalanish misoli:

// Ucha oladigan ob'ektlar uchun shartnoma aniqlaymiz
public interface IFlyable
{
    void Fly();
}

// Samolyot sinfi IFlyable interfeysini amalga oshiradi
public class Airplane : IFlyable
{
    public void Fly()
    {
        // Samolyot uchishining amalga oshirilishi
        Console.WriteLine("Samolyot uchmoqda");
    }
}

// Quyon ham IFlyable interfeysini amalga oshiradi
public class Bird : IFlyable
{
    public void Fly()
    {
        // Quyon uchishining amalga oshirilishi
        Console.WriteLine("Quyon uchmoqda");
    }
}

Abstrakt sinfdan foydalanish misoli:

// Nafas olish uchun umumiy amalga oshirishga ega bo'lgan abstrakt sinf Animal
public abstract class Animal
{
    public void Breathe()
    {
        Console.WriteLine("Hayvon nafas oladi");
    }

    // Voris sinflar tomonidan amalga oshirilishi kerak bo'lgan abstrakt metod
    public abstract void MakeSound();
}

// Animal'dan meros olgan aniq it sinfi
public class Dog : Animal
{
    public override void MakeSound()
    {
        Console.WriteLine("Gav!");
    }
}

// Animal'dan meros olgan aniq mushuk sinfi
public class Cat : Animal
{
    public override void MakeSound()
    {
        Console.WriteLine("Miy!");
    }
}