Sobes.tech
Junior

Mi a polimorfizmus a programozásban?

sobes.tech MI

Válasz az MI-től

A polimorfizmus az objektumok azon képessége, hogy különböző osztályok példányai ugyanarra a metódushívásra különböző módon reagáljanak. Ez öröklés, absztrakt osztályok és interfészek használatával érhető el. C#-ban a polimorfizmus a bázisosztály metódusainak felülírásán (overriding) és a metódusok túlterhelésén (overloading) keresztül nyilvánul meg.

Polimorfizmus példák:

  1. Metódusok felülírása (Futásidőben Polimorfizmus): A származtatott osztály saját implementációt ad egy a bázisosztályban deklarált metódushoz. Ehhez a bázisosztályban a virtual kulcsszót használjuk, a származtatott osztályban pedig az override-ot.

    // Bázisosztály
    class Shape
    {
        // Virtuális metódus, amit felül lehet írni
        public virtual void Draw()
        {
            // Alapértelmezett megvalósítás
        }
    }
    
    // Származtatott osztály 1
    class Circle : Shape
    {
        // Draw metódus felülírása
        public override void Draw()
        {
            // Körre vonatkozó megvalósítás
        }
    }
    
    // Származtatott osztály 2
    class Square : Shape
    {
        // Draw metódus felülírása
        public override void Draw()
        {
            // Négyzetre vonatkozó megvalósítás
        }
    }
    

    Ebben az esetben létrehozhatunk egy Shape objektumokat tartalmazó listát, és meghívhatjuk a Draw metódust minden elemre, és a konkrét megvalósítás lesz végrehajtva minden alak típusára.

  2. Metódusok túlterhelése (Fordítási idő Polimorfizmus): Több metódus ugyanazzal a névvel, de különböző szignatúrával (paraméterek számával vagy típusával) ugyanabban az osztályban.

    class Calculator
    {
        // Túlterhelt Add metódus (int)
        public int Add(int x, int y)
        {
            return x + y;
        }
    
        // Túlterhelt Add metódus (double)
        public double Add(double x, double y)
        {
            return x + y;
        }
    }
    

A polimorfizmus elősegíti rugalmasabb, bővíthetőbb és könnyebben karbantartható kód létrehozását. Lehetővé teszi általános kód írását, amely különböző típusú objektumokkal működhet.