Darsliklar C# Polimorfizm. (Sinf/Class)

C# C# Polimorfizm. (Sinf/Class)

Polimorfizm — OOP ning uchinchi ustuni. So’zning ma’nosi “ko’p shakllilik”: bitta metod nomi turli obyektlarda turlicha xatti-harakat qiladi. Bu OOP ning eng nafis imkoniyati — u bir xil kod bilan turli obyektlarni boshqarish imkonini beradi.

Polimorfizmbir interfeys (metod nomi) orqali turli sinf obyektlarining o’ziga xos xatti-harakatini chaqirish qobiliyati. C#’da u virtual va override orqali amalga oshiriladi.

Ota sinf turi orqali

Polimorfizmning asosi: ota sinf turidagi o’zgaruvchi bola sinf obyektini saqlashi mumkin. Metod chaqirilganda esa obyektning haqiqiy turiga mos versiya ishlaydi:

using System;

class Hayvon
{
    public virtual void Ovoz()
    {
        Console.WriteLine("Noma'lum ovoz");
    }
}

class Mushuk : Hayvon
{
    public override void Ovoz() => Console.WriteLine("Miyov");
}

class It : Hayvon
{
    public override void Ovoz() => Console.WriteLine("Vov");
}

Hayvon a = new Mushuk();
Hayvon b = new It();
a.Ovoz();
b.Ovoz();
Miyov
Vov

a va bHayvon turida e’lon qilingan, ammo har biri o’z haqiqiy turiga (Mushuk, It) mos ovoz chiqardi. C# obyektning haqiqiy turini ish vaqtida aniqlaydi.

Ro’yxatda polimorfizm

Polimorfizmning butun kuchi to’plam bilan birlashganda namoyon bo’ladi:

using System;
using System.Collections.Generic;

class Hayvon { public virtual void Ovoz() => Console.WriteLine("..."); }
class Mushuk : Hayvon { public override void Ovoz() => Console.WriteLine("Miyov"); }
class It : Hayvon { public override void Ovoz() => Console.WriteLine("Vov"); }

List<Hayvon> hayvonlar = new List<Hayvon> { new Mushuk(), new It() };
foreach (Hayvon h in hayvonlar)
{
    h.Ovoz();   // har biri o'z ovozini chiqaradi
}
Miyov
Vov

Bir xil h.Ovoz() chaqiruvi har bir obyektda uning turiga mos ishladi. Yangi tur qo’shsangiz — masalan, Ot — sikl kodini umuman o’zgartirmaysiz.

virtual, override, abstract

C# polimorfizm uchun uch kalit so’z beradi. Ularni jadvalda ko’ramiz:

Kalit so’z Vazifasi
virtual metodni qayta yozilishi mumkin qiladi
override bola sinfda metodni qayta yozadi
abstract tanasiz metod (bola majburan yozadi)

Nega polimorfizm kuchli?

Polimorfizm tufayli siz umumiy interfeys (Hayvon) bilan ishlaysiz, aniq turlar esa har biri o’zicha javob beradi. Bu kengaytiriladigan, moslashuvchan tizimlar qurishning kalitidir — yangi tur qo’shish mavjud kodni buzmaydi.

Xulosa

Bu bo’limda polimorfizmni, ota sinf turi orqali bola obyektini boshqarishni, ro’yxatda polimorfizmni va virtual/override/abstract kalit so’zlarini ko’rib chiqdik. Enkapsulatsiya, meros va polimorfizm bilan OOP ning uch ustunini o’zlashtirdik. Keyingi darsda fayllar bilan ishlashga o’tamiz.