12-mavzu. Vorislik va unda konstruktorlarni ishlatish


Download 48.37 Kb.
bet3/3
Sana08.11.2023
Hajmi48.37 Kb.
#1755129
1   2   3
Bog'liq
12-м. Ворислик. Синфлар шажараси.

Sealed kalit so’zi
C# dasturlash tilida vorislikni istisno qiladigan sealed kalit so’zi kiritilgan. Agar sinf sealed deb belgilangan bo'lsa, kompilyator undan voris qilib olishga imkon bermaydi. Quyida sealed turdagi sinfining namunasi keltirilgan:
sealed class А {
// ... sinf tanasi
//
}
class В : А { // Xato! A sinfga voris sinf bo’lish mumkin emas
//...
}

Konstruktorlarda vorislik va base kalit so’zi
Sinf iyerarxiyasida tayanch va hosila (voris) sinflarning o'z konstruktorlariga ega bo'lishiga yo'l qo'yiladi. Bu erda quyidagi o'rinli savol tug'iladi: qaysi konstruktor voris sinf ob'ektini qurish uchun javobgardir: tayanch sinf konstruktori, voris sinf konstruktori yoki ikkalasi ham? Bu savolga javob shundan iboratki, tayanch sinf konstruktori ob'ektning asosiy qismini va voris sinf konstruktori ushbu ob'ektning hosil bo'lgan qismini tuzadi. Va bu o'z mantig'iga ega, chunki voris sinfning har qanday elementlari tayanch sinf uchun noma'lum va murojaat mumkin emas, demak ular alohida tuzilishi kerak.
Agar konstruktor faqat voris sinfda aniqlansa, unda hamma narsa juda oddiy: voris sinf ob'ekti quriladi va ob'ektning tayanch qismi avtomatik ravishda o'zining standart konstruktori tomonidan yig'iladi.
Konstruktorlar tayanch va voris sinflarda aniqlanganda, ob'ektni qurish jarayoni biroz murakkablashadi, chunki ikkala sinfning konstruktorlari ham bajarilishi kerak. Bunday holda, siz ikkita foydalanishni o'z ichiga olgan base kalit so'zga murojaat qilishingiz kerak: birinchi navbatda, tayanch sinf konstruktorini chaqirish; ikkinchidan, voris sinf a'zosiga mos konstruktor tanasi keltiriladi.
Voris sinfning kengaytirilgan konstruktor e'lon qilish shakli va voris sinfdagi base kalit so'zdan foydalanib, uning tayanch sinfida aniqlangan konstruktorni chaqirish mumkin. Quyida e’lon qilish sintaksisining umumiy shakli keltirilgan:
Voris_sinf_konstruktori(parametrlar_ro’yxati) : base (argumentlar_ro’yxati)
{
// konstruktor tanasi
}

bu yerda argumentlar_ro’yxati – tayanch sinfda konstruktor talab qiladigan har qanday argumentlarni bildiradi. Ikki nuqtaning joylashgan joyiga e'tibor bering.


using System;

class TSinf


{
public int x, y, z;

// Tayanch sinf konstruktori


public TSinf(int a, int b, int c)
{
x = a; y = b; z = c;
}
}

class SinfA : TSinf


{
int point;
// Voris sinf konstruktori
public SinfA(int point, int a, int b, int c) :base(a,b,c)
{
this.point = point;
}
public void Pointer(SinfA ob)
{
ob.x *= ob.point;
ob.y *= ob.point;
ob.z *= ob.point;
Console.WriteLine("O'bektning yangi koordinatalari: ({0} {1} {2})", ob.x, ob.y, ob.z);
}
}
class Program
{
static void Main()
{
SinfA ob1 = new SinfA(10, 2, 4, 5);
Console.WriteLine("Ob'ekt koordinatalari: ({0} {1} {2})", ob1.x, ob1.y, ob1.z);
ob1.Pointer(ob1);
Console.ReadLine();
}
}


base kalit so'zdan foydalanib, siz tayanch sinfda aniqlangan har qanday shakldagi konstruktorni chaqirishingiz mumkin va faqat parametrlari berilgan argumentlarga mos keladigan konstruktor bajariladi.


Endi base kalit so'zning asosiy tamoyillarini ko'rib chiqamiz. Agar voris sinfda base kalit so'z ko'rsatilsa, uning bevosita tayanch sinfidan konstruktor chaqiriladi. Shuning uchun base kalit so'z har doim ierarxiyadagi chaqiruvchi sinfning yuqorisidagi tayanch sinfga tegishli. Bu hatto ko'p darajali sinf ierarxiyalari uchun ham amal qiladi. Argumentlar tayanch konstruktoriga base() metodi argumentlari sifatida beriladi. Agar kalit so'z yo'q bo'lsa, unda sukut bo'yicha tayanch sinfda ishlatiladigan konstruktor avtomatik ravishda chaqiriladi.
Download 48.37 Kb.

Do'stlaringiz bilan baham:
1   2   3




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