Urganch davlat universiteti fizika va matematika fakulteti amaliy matematika va informatika yo


Umumiy interfeyslarning kovaryansi va ziddiyatliligi



Download 96,44 Kb.
bet14/15
Sana27.04.2020
Hajmi96,44 Kb.
#47523
1   ...   7   8   9   10   11   12   13   14   15
Bog'liq
C# dasturlash tilida interfeyslar bilan ishlash

8 Umumiy interfeyslarning kovaryansi va ziddiyatliligi.

Kovariatsiya va qarama-qarshi tushunchalar ma'lum bir tur o'rniga, meros ierarxiyasida past yoki undan yuqori bo'lgan boshqa turni qo'llashda foydalanish qobiliyati bilan bog'liq.

Uchta xatti-harakatlar mavjud:

1.Covariance: avval o'rnatilganidan ko'ra ko'proq aniq turdan foydalanishga imkon beradi.

2.Qarama-qarshilik: sizga avvalgidan ko'ra universalroq turdan foydalanish imkonini beradi.

3.Invariance: faqat berilgan turdan foydalanishga imkon beradi.

C # kovariant va qarama-qarshi bo'lgan umumiy interfeyslarni yaratishga imkon beradi. Ushbu funktsionallik dasturda umumiy interfeyslardan foydalanganda moslashuvchanlikni oshiradi. Odatiy bo'lib, barcha umumiy interfeyslar, masalan, IAccout , o'zgarmasdir.

Kovariant va qarama-qarshi interfeyslarni ko'rib chiqish uchun biz quyidagi sinflarni olamiz:



class Account

{

    public virtual void DoTransfer(int sum)



    {

    Console.WriteLine($"Клиент положил на счет {sum} долларов");

    }

}

class DepositAccount : Account



{

    public override void DoTransfer(int sum)

    {

        Console.WriteLine($"Клиент положил на депозитный счет {sum} долларов");



    }

}


Bu erda biz odatiy hisob klassi - Hisob qaydnomasi va undan meros qilib olingan DepositAccount sinfini aniqlaymiz. Hisob qaydnomasi sinfi hisobda shartli operatsiyani bajaradigan usulni belgilaydi. DepositAccount klassi ushbu interfeysni biroz o'zgartiradi.

Kovariant interfeyslari

Agar umumiy kalit so'z umumiy parametrga qo'llanilsa, umumiy interfeyslar kovariant bo'lishi mumkin. Masalan:

interface IBank

{

    T CreateAccount(int sum);



}

 

class Bank : IBank where T : Account, new()



{

    public T CreateAccount(int sum)

    {

        T acc = new T();  // создаем счет



        acc.DoTransfer(sum);

        return acc;

    }

}


Umumiy IBank interfeysi hisob yaratish uchun CreateAccount usulini belgilaydi. Bundan tashqari, interfeysni aniqlash vaqtida biz qaysi turdagi hisobni ko'rsatishini bilmaymiz. Interfeysni aniqlashdagi kalit so'z interfeys kovariant bo'lishini anglatadi.

Shartli bankni ifodalovchi Bank sinfi ushbu interfeysni amalga oshiradi va CreateAccount usulidan ob'ektni Hisob sinfi yoki uning avlodlaridan birini anglatadi.

Ushbu turlarni dasturda qo'llaymiz:

static void Main(string[] args)

{

    IBank depositBank = new Bank();



    Account acc1 = depositBank.CreateAccount(34);

 

    IBank ordinaryBank = new Bank();



    // или так

    // IBank ordinaryBank = depositBank;

    Account acc2 = ordinaryBank.CreateAccount(45);

 

    Console.Read();



}

Ya'ni, biz ko'proq aniq turdagi IBank yoki Bank ob'ektini yanada kengroq turdagi IBank ga tayinlashimiz mumkin.

Shu bilan birga, agar biz kalit so'zni ishlatmagan bo'lsak:




interface IBank
keyin chiziqda xatoga duch kelamiz

IBank ordinaryBank = depositBank;

Chunki bu holda Bankning ob'ekti IBank turiga o'tkazib bo'lmaydi.

Kovariant interfeysini yaratishda universal parametr faqat interfeys usullari bilan qaytarilgan qiymat turi sifatida ishlatilishi mumkinligini yodda tutish kerak. Ammo uni metod argumenti turi yoki interfeys usullarini cheklash sifatida ishlatish mumkin emas.




Download 96,44 Kb.

Do'stlaringiz bilan baham:
1   ...   7   8   9   10   11   12   13   14   15




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

kiriting | ro'yxatdan o'tish
    Bosh sahifa
юртда тантана
Боғда битган
Бугун юртда
Эшитганлар жилманглар
Эшитмадим деманглар
битган бодомлар
Yangiariq tumani
qitish marakazi
Raqamli texnologiyalar
ilishida muhokamadan
tasdiqqa tavsiya
tavsiya etilgan
iqtisodiyot kafedrasi
steiermarkischen landesregierung
asarlaringizni yuboring
o'zingizning asarlaringizni
Iltimos faqat
faqat o'zingizning
steierm rkischen
landesregierung fachabteilung
rkischen landesregierung
hamshira loyihasi
loyihasi mavsum
faolyatining oqibatlari
asosiy adabiyotlar
fakulteti ahborot
ahborot havfsizligi
havfsizligi kafedrasi
fanidan bo’yicha
fakulteti iqtisodiyot
boshqaruv fakulteti
chiqarishda boshqaruv
ishlab chiqarishda
iqtisodiyot fakultet
multiservis tarmoqlari
fanidan asosiy
Uzbek fanidan
mavzulari potok
asosidagi multiservis
'aliyyil a'ziym
billahil 'aliyyil
illaa billahil
quvvata illaa
falah' deganida
Kompyuter savodxonligi
bo’yicha mustaqil
'alal falah'
Hayya 'alal
'alas soloh
Hayya 'alas
mavsum boyicha


yuklab olish