C# interfeys
Interfeyslar
C# da abstraksiyaga erishishning yana bir usuli — interfeyslar.
interface — to‘liq "abstrakt sinf" bo‘lib, u faqat abstrakt metodlar va xususiyatlarni (bo‘sh tanali) o‘z ichiga olishi mumkin:
Misol
// interface
interface Animal
{
void animalSound(); // interface method (does not have a body)
void run(); // interface method (does not have a body)
}
Interfeys nomini "I" harfi bilan boshlash yaxshi amaliyot hisoblanadi, chunki bu sizga va boshqalarga uning sinf emas, balki interfeys ekanini eslab qolishni osonlashtiradi.
Sukut bo‘yicha interfeys a’zolari abstract va public bo‘ladi.
Eslatma: Interfeyslar xususiyatlar va metodlarni o‘z ichiga olishi mumkin, lekin maydonlarni emas.
Interfeys metodlariga murojaat qilish uchun interfeys boshqa sinf tomonidan "amalga oshirilishi" (implement — meros olishga o‘xshash) kerak. Interfeysni amalga oshirish uchun (xuddi vorislikdagi kabi) : belgisidan foydalaning. Interfeys metodining tanasini uni "amalga oshiruvchi" sinf taqdim etadi. E’tibor bering, interfeysni amalga oshirishda override kalit so‘zidan foydalanish shart emas:
Misol
// Interface
interface IAnimal
{
void animalSound(); // interface method (does not have a body)
}
// Pig "implements" the IAnimal interface
class Pig : IAnimal
{
public void animalSound()
{
// The body of animalSound() is provided here
Console.WriteLine("The pig says: wee wee");
}
}
class Program
{
static void Main(string[] args)
{
Pig myPig = new Pig(); // Create a Pig object
myPig.animalSound();
}
}
Interfeyslar haqida eslatmalar:
- Abstrakt sinflar kabi interfeyslardan ham obyekt yaratish uchun foydalanib bo‘lmaydi (yuqoridagi misolda Program sinfida "IAnimal" obyektini yaratib bo‘lmaydi)
- Interfeys metodlarining tanasi bo‘lmaydi — tanani "amalga oshiruvchi" sinf taqdim etadi
- Interfeysni amalga oshirishda uning barcha metodlarini qayta aniqlashingiz (override) shart
- Interfeyslar xususiyatlar va metodlarni o‘z ichiga olishi mumkin, lekin maydonlar/o‘zgaruvchilarni emas
- Interfeys a’zolari sukut bo‘yicha
abstractvapublicbo‘ladi - Interfeysda konstruktor bo‘lishi mumkin emas (chunki undan obyekt yaratib bo‘lmaydi)
Nima uchun va qachon interfeyslardan foydalanish kerak?
1) Xavfsizlikka erishish uchun — ba’zi tafsilotlarni yashirib, obyektning (interfeysning) faqat muhim tafsilotlarini ko‘rsatish.
2) C# "ko‘plab vorislik"ni (multiple inheritance) qo‘llab-quvvatlamaydi (sinf faqat bitta asosiy sinfdan meros olishi mumkin). Biroq bunga interfeyslar yordamida erishish mumkin, chunki sinf bir nechta interfeysni amalga oshira oladi. Eslatma: Bir nechta interfeysni amalga oshirish uchun ularni vergul bilan ajrating (keyingi bobdagi misolga qarang).
W3Schools Pathfinder
Yutuqlaringizni kuzating – bu bepul!
