26-mavzu. Ichma-ich joylashgan sinflar. Reja


Download 53.57 Kb.
Sana17.06.2023
Hajmi53.57 Kb.
#1548683
Bog'liq
26-maruza matni (1)


26-mavzu. Ichma-ich joylashgan sinflar.
Reja:

  1. Ichma-ich joylashgan sinflar e’loni.

  2. Ichma-ich joylashgan sinflarni nomlar fazosida ishlatish.



Muhrlangan sinfni sinfga qo’shish


Ko’rib chiqdikki, muhrlangan sinfdan vorislik olib bo’lmaydi. Ayrim holatlarda o’zimizning sinfimizda ushubu murhlangan sinfning a’zolaridan foydalanishni istaymiz. Bu qanday bajariladi? Takrorlaymiz, vorislikka yo’l qo’yilmaydi. Bu muammoni yechish uchun muhrlangan sinfda olingan elementni chaqirish usulini qo’llaymiz.
Quyidagi dasturda (8.12-listing) muhrlangan sinfdan foydalanish ko’rsatilgan:


8.12-listing
using System;
namespace app29_include_sealed
{
sealed public class A
{
private int a; // Maydon
private int b;
// Xossa
public int A_a
{
get { return a; }
set { a = value; }
}
public int A_b
{
get { return b; }
set { b = value; }
}
// Konstruktor
public A(int a, int b)
{ this.a = a; this.b = b; }
// Metod
public int M_A()
{
return (a + b);
}
}
internal class B
{
public int c;
public A ab = new A(15, 20);
public B(int cc)
{
c = cc;
}
}
internal class Program
{
public static void Main()
{
B ba = new B(5);
int sum = ba.c + ba.ab.M_A();
Console.WriteLine("Yaratilgan obyektda Muhrlangan sinfdan foydalanish");
Console.WriteLine("B sinfning maydoni bilan = {0}", ba.c);
Console.WriteLine("Muhtrlangan A sinfining maydoni= {0}, {1}", ba.ab.A_a, ba.ab.A_b);
Console.WriteLine("A dagi va B dagi metodlar yig'indisi natijasi: {0}", sum);
}
}
}

Demak, muhrlangan A sinfida ikkita maydon mavjud, ruxsat faqat ikkita mos xossalar orqali amalga oshiriladi: A_a va A_b. A sinfi M_A() metodiga ega bo’lib, u yopiq maydonlarning qiymatlari yig’indisini hisoblaydi. Biz B sinfini qurishda bitta c maydoni va muhrlanga sinfidan olinga ab obyektidan foydalandik. Ekranda chiqarilgan ma’lumotlarga qarasak (8.6-rasm), garchi vorislik bo’lmasa ham, A sinfning funksionalligidan B sinfida foydalanilgan (shu jumladan, M_A() metodidan ham). Agar e’tibor bergan bo’lsak, biror sinfning obyekti boshqa sinfning ichida joylashgan bo’lsa, bu holatda sinfning ichidagi obyektga murojaat qilish uchun nuqta amalidan foydalanilgan Buni


int sum = ba.c + ba.ab.M_A();


satrida kuzatishimiz mumkin. Bu yerda ab obyekti B sinfining ichida joylashgan.








8.6-rasm. Muhrlangan sinf elementlaridan foydalanish


Ichki sinflar


Yuqoridagi misolda biz ichki tiplarni qo’lladik: C# tilida ichki tiplarga ruxsat beriladi( Bu holatda sinf tipi nazarda tutilmoqda, qolgan tiplarni bunday ishlatish haqida bilmaymiz)1. Bunda ichki tiplar oddiy a’zolarini yoki ichki sinflarni qamrab olgan hisoblanadi. Ichki sinflarga misol:


public class TashqiSinf


{
public class IchkiSinf1 { }
private class IchkiSinf2 { }
}

Agar ichki sinflardan foydalanishimiz uchun, undagi mavjud bo’lgan barcha sinflarni nuqta amali vositasida ketma-ket yozib chiqishimiz kerak. Misol sifatida yuqorida e’lon qilingan IchkiSinf1 sinfida yaratilgan obyektni asosiy dasturda e’lon qilishni ko’rib chiqamiz:


static void Main()


{
TashqiSinf.IchkiSinf1 obj1 = new TashqiSinf.IchkiSinf1();
}

Agar ichki sinflar bir nechta tashqi sinflar ichida joylashsa uning obyektini yaratish uchun biroz ko’proq yozuv yozishimizga to’g’ri keladi. Bu muammoni bartaraf etish usuli allaqachon o’ylab topilgan. Buning uchun integrallashgan muhitning Podskazchiklari yordamga keladi. Agar biz birinchi turgan tashqi sinfni yozishimiz bilanoq, u bizga unda mavjud bo’lgan a’zolar va ichki sinflar haqida ma’lumotni beradi. Darhol ulardan birini tanlab klavishasini bosib ketaveramiz. Shu bilan biz kerakli sinfga yetib olamiz.





1 Пахомов Б. И. С# для начинающих СПб.: БХВ-Петербург, 2014 432 с.: ил. 177 страница

Download 53.57 Kb.

Do'stlaringiz bilan baham:




Ma'lumotlar bazasi mualliflik huquqi bilan himoyalangan ©fayllar.org 2024
ma'muriyatiga murojaat qiling