Namangan davlat universiteti matematika fakulteti


Umumlashgan turlar vorisligi



Yüklə 48,85 Kb.
səhifə7/9
tarix08.06.2023
ölçüsü48,85 Kb.
#127141
1   2   3   4   5   6   7   8   9
Alibekov Kamoliddin kurs ishi 3

Umumlashgan turlar vorisligi.
Bitta umumiy sinf boshqa umumlashgandan meros bo'lishi mumkin. Bunday holda, siz meros uchun turli xil variantlardan foydalanishingiz mumkin.
Aytaylik, bizda quyidagi asosiy Person sinfi mavjud:
class Person
{
public T Id { get;}
public Person(T id)
{
Id = id;
}
}

Birinchi variant - asosiy sinf bilan bir xil turdagi terilgan hosila sinf yaratish:


class UniversalPerson : Person
{
public UniversalPerson(T id) : base(id) { }
}

Sinfga tadbiqi:


Person person1 = new Person("34");
Person person3 = new UniversalPerson(45);
UniversalPerson person2 = new UniversalPerson(33);
Console.WriteLine(person1.Id);
Console.WriteLine(person2.Id);
Console.WriteLine(person3.Id);

Ikkinchi variant - odatiy umumlashtirilmagan merosxo'r sinfini yaratish. Bunday holda, asosiy sinfdan meros bo'lib o'tayotganda, foydalaniladigan turni aniq belgilashingiz kerak:


class StringPerson : Person
{
public StringPerson(string id) : base(id) { }
}

Hosila sinf endi string turini tur sifatida ishlatadi. Sinfga murojaat qilish:


StringPerson person4 = new StringPerson("438767");
Person person5 = new StringPerson("43875");
// bunday yozib bo`lmaydi
//Person person6 = new StringPerson("45545");
Console.WriteLine(person4.Id);
Console.WriteLine(person5.Id);

Uchinchi variant esa olingan sinfni asosiy sinfdagi umumiy parametrdan mutlaqo boshqa turdagi parametr bilan yozishni ifodalaydi. Bunday holda, siz asosiy sinf uchun ishlatiladigan turni ham ko'rsatishingiz kerak:


class IntPerson : Person
{
public T Code { get; set; }
public IntPerson(int id, T code) : base(id)
{
Code = code;
}
}

Bu yerda IntPerson turi boshqa tur bo‘yicha yoziladi, u asosiy sinf ishlatadigan turga mos kelmasligi mumkin. Sinf arizasi:


IntPerson person7 = new IntPerson(5, "r4556");
Person person8 = new IntPerson(7, 4587);
Console.WriteLine(person7.Id);
Console.WriteLine(person8.Id);

Shuningdek, meros qilib olingan sinflarda siz asosiy sinfdan umumiy parametrdan foydalanishni parametrlaringiz bilan birlashtirishingiz mumkin:


class MixedPerson : Person
where K : struct
{
public K Code { get; set; }
public MixedPerson(T id, K code) : base(id)
{
Code = code;
}
}

Bu yerda asosiy sinfdan meros bo'lib qolgan T parametriga qo'shimcha ravishda yangi K parametr qo'shiladi.Shuningdek, agar cheklovlar o'rnatish zarur bo'lsa, ularni asosiy sinf nomidan keyin ko'rsatishimiz mumkin. Sinfga murojaat qilish:


MixedPerson person9 = new MixedPerson("456", 356);
Person person10 = new MixedPerson("9867", 35678);
Console.WriteLine(person9.Id);
Console.WriteLine(person10.Id);
Shuni yodda tutish kerakki, agar asosiy sinf darajasida umumiy parametr uchun cheklov o'rnatilgan bo'lsa, unda shunga o'xshash cheklash ushbu parametrdan foydalanadigan hosila sinflarida ham aniqlanishi kerak:
class Person where T : class
{
public T Id { get;}
public Person(T id) => Id = id;
}
class UniversalPerson : Person where T: class
{
public UniversalPerson(T id) : base(id) { }
}
Ya'ni, agar sinf asosiy sinfda, ya'ni har qanday sinfda cheklash sifatida ko'rsatilgan bo'lsa, hosil bo'lgan sinfda ham sinfni cheklash yoki biron bir maxsus sinfni ko'rsatish kerak.



Yüklə 48,85 Kb.

Dostları ilə paylaş:
1   2   3   4   5   6   7   8   9




Verilənlər bazası müəlliflik hüququ ilə müdafiə olunur ©azkurs.org 2024
rəhbərliyinə müraciət

gir | qeydiyyatdan keç
    Ana səhifə


yükləyin