C# polimorfizm


ULASHISH

Polimorfizm va metodlarni qayta aniqlash (overriding)

Polimorfizm "ko‘p shakllilik" degan ma’noni anglatadi va u bir-biri bilan vorislik orqali bog‘langan ko‘plab sinflar mavjud bo‘lganda yuzaga keladi.

Oldingi bobda aytganimizdek, vorislik boshqa sinfdan maydon va metodlarni meros qilib olish imkonini beradi. Polimorfizm esa bu metodlardan turli vazifalarni bajarish uchun foydalanadi. Bu bitta amalni turli usullarda bajarish imkonini beradi.

Masalan, animalSound() nomli metodga ega Animal nomli asosiy sinfni tasavvur qiling. Hayvonlarning hosila sinflari cho‘chqalar, mushuklar, itlar, qushlar bo‘lishi mumkin — va ularning har biri hayvon ovozini o‘zicha amalga oshiradi (cho‘chqa xurillaydi, mushuk miyovlaydi va h.k.):

Misol

class Animal  // Base class (parent) 
{
  public void animalSound() 
  {
    Console.WriteLine("The animal makes a sound");
  }
}

class Pig : Animal  // Derived class (child) 
{
  public void animalSound() 
  {
    Console.WriteLine("The pig says: wee wee");
  }
}

class Dog : Animal  // Derived class (child) 
{
  public void animalSound() 
  {
    Console.WriteLine("The dog says: bow wow");
  }
}

Vorislik bobidan eslang: sinfdan meros olish uchun : belgisidan foydalanamiz.

Endi Pig va Dog obyektlarini yaratib, ularning ikkalasida ham animalSound() metodini chaqirishimiz mumkin:

Misol

class Animal  // Base class (parent) 
{
  public void animalSound() 
  {
    Console.WriteLine("The animal makes a sound");
  }
}

class Pig : Animal  // Derived class (child) 
{
  public void animalSound() 
  {
    Console.WriteLine("The pig says: wee wee");
  }
}

class Dog : Animal  // Derived class (child) 
{
  public void animalSound() 
  {
    Console.WriteLine("The dog says: bow wow");
  }
}

class Program 
{
  static void Main(string[] args) 
  {
    Animal myAnimal = new Animal();  // Create a Animal object
    Animal myPig = new Pig();  // Create a Pig object
    Animal myDog = new Dog();  // Create a Dog object

    myAnimal.animalSound();
    myPig.animalSound();
    myDog.animalSound();
  }
}

Natija quyidagicha bo‘ladi:

The animal makes a sound
The animal makes a sound
The animal makes a sound

O‘zingiz sinab ko‘ring »

Men kutgan natija emas

Yuqoridagi misol natijasi, ehtimol, siz kutgandek bo‘lmadi. Buning sababi — nomlari bir xil bo‘lganda asosiy sinf metodi hosila sinf metodidan ustun keladi.

Biroq C# asosiy sinf metodini qayta aniqlash (override) imkonini beradi: buning uchun asosiy sinf ichidagi metodga virtual kalit so‘zini qo‘shish va har bir hosila sinf metodi uchun override kalit so‘zidan foydalanish kerak:

Misol

class Animal  // Base class (parent) 
{
  public virtual void animalSound() 
  {
    Console.WriteLine("The animal makes a sound");
  }
}

class Pig : Animal  // Derived class (child) 
{
  public override void animalSound() 
  {
    Console.WriteLine("The pig says: wee wee");
  }
}

class Dog : Animal  // Derived class (child) 
{
  public override void animalSound() 
  {
    Console.WriteLine("The dog says: bow wow");
  }
}

class Program 
{
  static void Main(string[] args) 
  {
    Animal myAnimal = new Animal();  // Create a Animal object
    Animal myPig = new Pig();  // Create a Pig object
    Animal myDog = new Dog();  // Create a Dog object

    myAnimal.animalSound();
    myPig.animalSound();
    myDog.animalSound();
  }
}

Natija quyidagicha bo‘ladi:

The animal makes a sound
The pig says: wee wee
The dog says: bow wow

O‘zingiz sinab ko‘ring »

Nima uchun va qachon "vorislik" va "polimorfizm"dan foydalanish kerak?

- Bu koddan qayta foydalanish uchun foydali: yangi sinf yaratganda mavjud sinfning maydonlari va metodlaridan qayta foydalaning.




W3Schools Pathfinder

Yutuqlaringizni kuzating – bu bepul!