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!");
}
}