Maxsus interfeyslarni kiritish
Endi, Siz interfeyslarning umumiy ahamiyatini bilib olganingizdan so’ng, maxsus interfeyslarni kiritish va realizatsiya qilishga oid misol ko’rib chiqaylik. Boshlash uchun dastlab MaxsusInterfeys degan konsol dasturini yaratamiz.
Project --> Add Existing Item menyu punktidan foydalanib proyektga oldin yaratilgan Shakl figuralar toifasini qo’shamiz. Keyin figuralar bilan bog’liq toifalar aniqlangan nomlar fazosini MaxsusInterfeys deb qayta nomlab qoyamiz:
namespace MaxsusInterfeys
{
// Bu yerda figuralarning toifalari aniqlanadi...
}
Endi Project --> Add Existing Item menyu punktini tanlab, proyektga INuqta degan yangi interfeysni qo’shamiz.
Sintaksis sathda interfeys C# tilining interface kalit so’zidan foydalangan holda aniqlanadi. Sinflardan farqli o’laroq interfeyslar uchun hech qachon bazaviy sinf berilmaydi, ko’rsatilmaydi (hatto System.Object ham; shunga qaramay, bazaviy interfeyslarni ko’rsatish mumkin). Undan tashqari, interfeys a’zolari uchun hech qachon murojaat modifikatorlari ko’rsatilmaydi (chunki interfeysning barcha a’zolari nooshkor tarzda ochiq va abstraktdir). Quyida C# da maxsus interfeysni aniqlashga (kiritishga) oid misol keltirilgan:
// Bu interfeys “uchlar mavjudligi” metodini kiritadi
public interface INuqta'>INuqta
{
// Nooshkor ochiq va abstrakt
byte OlUchlarSonini();
}
Shuni unutmangki, interfeys a’zolarini kiritishda ularning realizatsiya qilinish hududi ko’rsatilmaydi. Interfeyslar – sof protokoldir va shu bois ular uchun realizatsiya hech qachon taqdim etilmaydi (buning uchun uni qo’llaydigan sinf yoki struktura mas’uldir). Demak, INuqta interfeysining quyida ko’rsatilgan versiyasi kompilyatsiya bosqichida turli xatoliklarni keltirib chiqaradi:
// Diqqat! Ushbu kod xatolarga to’la!
public interface INuqta
{
// Xato! Interfeyslarda ma’lumotlar maydonlari bo’lmaydi!
public int nuqtalarSoni;
// Xato! Interfeyslarda konstruktorlar bo’lmaydi
public INuqta () { nuqtalarSoni = 0;}
// Xato! Interfeyslar o’z a’zolarini realizatsiya qilmaydi!
byte OlUchlarSonini(){ return nuqtalarSoni; }
}
INuqta interfeysining yuqoridagi boshlang’ich versiyasida faqat bitta metod kiritilgan. Biroq .NETning interfeys toifalarida xossalar prototiplarining istalgan miqdorini kiritishga izn berilgan. Masalan, INuqta interfeysini ananaviy murojaat metodi o’rniga faqat o’qish uchun xossalarni qo’llagan holda quyidagicha o’zgartirish mumkin:
// “uchlar mavjudligi” faqat o’qish uchun xossalari orqali
public interface INuqta
{
// o’qish va yozish xossasi interfeysda ushbu ko’rinishda bo’lishi mumkin:
// qaytToifa XossaNomi { get; set; }
//
// faqat yozish uchun xossa esa quyidagicha bo’ladi:
// qaytToifa XossaNomi { set; }
byte Nuqtalar { get; }
}
Interfeyslar o’z holicha mutlaqo foydasizdir, chunki ular bor-yo’g’i abstract a’zolarning nomlangan kollektsiyalaridan iboratdir. Masalan, sinf yoki strukturaga xotira ajratilgani kabi interfeys toifalariga xotira ajratish mumkin emas:
// Diqqat!Interfeyslar uchun xotira ajratish mumkin emas!
static void Main(string [] args)
{
Do'stlaringiz bilan baham: |