Sobes.tech
Junior

Какво е полиморфизъм в програмирането?

sobes.tech AI

Отговор от AI

Полиморфизмът е способността на обекти от различни класове да реагират по различен начин на един и същ повикване на метод. Това се постига чрез използване на наследяване, абстрактни класове и интерфейси. В C# полиморфизмът се проявява чрез презаписване (overriding) на методи на базовия клас в производните класове и чрез претоварване (overloading) на методи.

Примери за полиморфизъм:

  1. Презаписване на методи (Полиморфизъм в време на изпълнение): Производният клас предоставя собствена реализация на метод, обявен в базовия клас. За това в базовия клас се използва ключовата дума virtual, а в производния — override.

    // Базов клас
    class Shape
    {
        // Виртуален метод, който може да бъде презаписан
        public virtual void Draw()
        {
            // Реализация по подразбиране
        }
    }
    
    // Производен клас 1
    class Circle : Shape
    {
        // Презаписване на метода Draw
        public override void Draw()
        {
            // Реализация за кръг
        }
    }
    
    // Производен клас 2
    class Square : Shape
    {
        // Презаписване на метода Draw
        public override void Draw()
        {
            // Реализация за квадрат
        }
    }
    

    В този случай може да се създаде списък от обекти Shape и да се извика методът Draw за всеки от тях, като ще се извика конкретната реализация за всеки тип фигура.

  2. Претоварване на методи (Compile-time полиморфизъм): Множество методи със същото име, но с различни сигнатури (броя или типовете на параметрите) в една и съща класа.

    class Calculator
    {
        // Претоварен метод Add (за int)
        public int Add(int x, int y)
        {
            return x + y;
        }
    
        // Претоварен метод Add (за double)
        public double Add(double x, double y)
        {
            return x + y;
        }
    }
    

Полиморфизмът насърчава създаването на по-гъвкав, разширяем и лесен за поддръжка код. Той позволява писането на обобщен код, който може да работи с обекти от различни типове.