public void Setk() {
k = i * j;
}
public void Showk() {
Console.WriteLine(k) ;
}
}
class ProtectedDemo {
static void Main() {
D ob = new D();
ob.Set(2, 3); // D sinfi uchun mavjud bo'lgani uchun ruxsat beriladi
ob.Show(); // D sinfi uchun mavjud bo'lgani uchun ruxsat beriladi
ob.Setk(); // D sinfiga kirganligi uchun ruxsat beriladi
ob.ShowkO; // D sinfiga kirganligi uchun ruxsat beriladi
}
}
Ushbu misolda B klassi D klassi tomonidan meros qilib olinadi va uning a'zolari i va j himoyalangan deb e'lon qilingani uchun ular Setk() metodi uchun mavjud. Agar B sinfining i va j a'zolari private deb e'lon qilinganda edi, ularga D sinfidan kirib bo`lmasdi va yuqoridagi kodni kompilyatsiya qilinmas edi.
public va private holatiga o'xshash, protected holati ham meros darajalari sonidan qat'i nazar sinf a'zosi uchun saqlanadi. Shuning uchun, bir natijaviy sinf boshqa natijaviy sinf asosiy sinf sifatida ishlatiladi, boshlang`ich asosiy sinfning har qanday himoyalangan a'zosi, birinchi natijaviy sinfga himoyalangan meros bo`lib o`tadi, undan himoyalangan meros bo`lib keyingi ikkinchi natijaviy sinfga o`tadi.
O`zining barcha foydali jihatlariga qaramasdan, himoyalangan kirish barcha holatlar uchun mos emas. Shunday qilib, yuqorida keltirilgan misollardagi TwoDShape sinfining Width va Height a'zolarining qiymatlari ochiq bo'lishi kerak, agar ular protected deb e'lon qilingan bo'lsa, ularga beriladigan qiymatlarni boshqarib bo`lmaydi. Bunday holda, yanada qulay yechim kirishni boshqarishni oldini olish emas balki xususiyatlardan foydalanish edi. Shunday qilib, himoyalangan kirish modifikatori sinfning barcha ierarxiyasi uchun mavjud bo'lgan sinf a'zosini yaratish va qolgan kod uchun u yopiq bo'lishi zarur bo'lgan hollarda qo'llanilishi kerak. Sinf a'zosining qiymatiga kirishni boshqarishda xususiyatdan foydalanish yaxshiroqdir.
Do'stlaringiz bilan baham: |