C# xususiyatlari (properties)
Xususiyatlar (properties) va inkapsulyatsiya
Xususiyatlarni tushuntirishni boshlashdan oldin "Inkapsulyatsiya" haqida asosiy tushunchaga ega bo‘lishingiz kerak.
Inkapsulyatsiyaning ma’nosi — "maxfiy" ma’lumotlarning foydalanuvchilardan yashirilishini ta’minlash. Bunga erishish uchun quyidagilarni bajarishingiz kerak:
- maydonlarni/o‘zgaruvchilarni
privatedeb e’lon qilish privatemaydon qiymatini olish va yangilash uchun xususiyatlar orqalipublicgetvasetmetodlarini taqdim etish
Xususiyatlar (properties)
Oldingi bobdan private o‘zgaruvchilarga faqat shu sinf ichida murojaat qilish mumkinligini (tashqi sinf ularga kira olmasligini) bilib oldingiz. Biroq ba’zan ularga murojaat qilishimiz kerak bo‘ladi — buni xususiyatlar yordamida amalga oshirish mumkin.
Xususiyat — o‘zgaruvchi va metodning birikmasiga o‘xshaydi va u ikkita metodga ega: get va set metodlari:
Misol
class Person
{
private string name; // field
public string Name // property
{
get { return name; } // get method
set { name = value; } // set method
}
}
Misol izohi
Name xususiyati name maydoni bilan bog‘langan. Xususiyat va private maydon uchun bir xil nomdan foydalanish, lekin xususiyat nomini katta harf bilan boshlash yaxshi amaliyot hisoblanadi.
get metodi name o‘zgaruvchisining qiymatini qaytaradi.
set metodi name o‘zgaruvchisiga value’ni o‘zlashtiradi. value kalit so‘zi xususiyatga beriladigan qiymatni ifodalaydi.
Agar buni to‘liq tushunmagan bo‘lsangiz, quyidagi misolga qarang.
Endi Person sinfining private maydoniga murojaat qilish va uni yangilash uchun Name xususiyatidan foydalanishimiz mumkin:
Misol
class Person
{
private string name; // field
public string Name // property
{
get { return name; }
set { name = value; }
}
}
class Program
{
static void Main(string[] args)
{
Person myObj = new Person();
myObj.Name = "Liam";
Console.WriteLine(myObj.Name);
}
}
Natija quyidagicha bo‘ladi:
Liam
Avtomatik xususiyatlar (qisqa yozuv)
C# qisqa yozuvli / avtomatik xususiyatlardan foydalanish imkonini ham beradi: bunda xususiyat uchun maydon aniqlash shart emas, xususiyat ichida faqat get; va set; yozish kifoya.
Quyidagi misol yuqoridagi misol bilan bir xil natija beradi. Yagona farqi — kod kamroq:
Misol
Avtomatik xususiyatlardan foydalanish:
class Person
{
public string Name // property
{ get; set; }
}
class Program
{
static void Main(string[] args)
{
Person myObj = new Person();
myObj.Name = "Liam";
Console.WriteLine(myObj.Name);
}
}
Natija quyidagicha bo‘ladi:
Liam
Nega inkapsulyatsiya kerak?
- Sinf a’zolarini yaxshiroq nazorat qilish (o‘zingiz (yoki boshqalar) kodni buzib qo‘yish ehtimolini kamaytirish)
- Maydonlarni faqat o‘qiladigan (agar faqat
getmetodidan foydalansangiz) yoki faqat yoziladigan (agar faqatsetmetodidan foydalansangiz) qilish mumkin - Moslashuvchanlik: dasturchi kodning bir qismini boshqa qismlariga ta’sir qilmasdan o‘zgartira oladi
- Ma’lumotlar xavfsizligi oshadi
W3Schools Pathfinder
Yutuqlaringizni kuzating – bu bepul!
