// Sinfning yopiq a'zolariga kirish meros qilib berilmaydi.
// Ushbu kod namunasi kompilyatsiya qilinmaydi.
using System;
// Ikki o'lchovli ob'ektlar uchun sinf.
class TwoDShape {
double Width; // endi bu yopiq o'zgaruvchidir
double Height; // endi bu yopiq o'zgaruvchidir
public void ShowDimO {
Console.WriteLine("Ширина и высота равны " +
Width + " и " + Height);
}
}
// Triangle sinfi TwoDShape sinfidan olingan.
class Triangle : TwoDShape {
public string Style; // uchburchak turi
// Uchburchakning maydonini qaytarish.
public double Area() {
return Width * Height /2; // Xatolik, yopiq sinf a'zosiga kirish taqiqlanadi.
}
// Uchburchak turini ko'rsatish.
public void ShowStyleO {
Console.WriteLine("Треугольник " + Style);
}
}
Area() metodi Width va Height o'zgaruvchilariga murojaat qila olmagani uchun Triangle sinf kompilyatsiya qilinmaydi. Width va Height o'zgaruvchilari yopiq bo'lgani uchun, ular faqat sinfning boshqa a'zolari uchun mavjud, ammo natijaviy sinflari a'zolari uchun mavjud emas.
Bir qarashda, asosiy sinfning xususiy a'zolariga natijaviy sinfdan kirishni cheklash qiyin kechadi, chunki u ko'p hollarda ushbu sinfning xususiy a'zolaridan foydalanish imkoniyatini bermaydi. Lekin, aslida, bunday emas. C# tilida ushbu cheklovni bartaraf etish uchun turli usullar mavjud. Ulardan biri keyingi bobda ko'rib chiqiladigan himoyalangan (protected) sinf a'zolari, ikkinchisi esa yopiq ma'lumotlarga kirish uchun ochiq xususiyatlardan foydalanishdir.
Avvalgi bobda aytib o'tilganidek, xususiyat o`zgaruvchi nusxasiga kirishni boshqarish imkonini beradi. Misol uchun, xususiyatdan foydalanib, o'zgaruvchining qiymatiga kirish uchun cheklovlarni kiritishingiz yoki uni faqat o'qish uchun ishlatishingiz mumkin. Shunday qilib, agar xususiyat ochiq bo`lsa, lekin uning asosiy o'zgaruvchi yopiq deb e'lon qilingan bo`lsa, bu xususiyatni natijaviy sinfida ishlatilishi mumkin, ammo uning asosiy yopiq o'zgaruvchiga bevosita kirish imkoni bo'lmaydi.
Do'stlaringiz bilan baham: |