खोज…


एक और बहुरूपता उदाहरण

बहुरूपता OOP के स्तंभ में से एक है। पाली एक ग्रीक शब्द से निकला है जिसका अर्थ है 'एकाधिक रूप'।

नीचे एक उदाहरण है जो बहुरूपता का प्रदर्शन करता है। क्लास Vehicle बेस क्लास के रूप में कई रूप लेता है।

व्युत्पन्न कक्षाएं Ducati और Lamborghini Vehicle से विरासत में मिली और बेस क्लास के Display() विधि को ओवरराइड करती है, अपने स्वयं के NumberOfWheels को प्रदर्शित करने के लिए।

public class Vehicle
{
    protected int NumberOfWheels { get; set; } = 0;
    public Vehicle()
    {
    }

    public virtual void Display()
    {
        Console.WriteLine($"The number of wheels for the {nameof(Vehicle)} is {NumberOfWheels}");
    }
}

public class Ducati : Vehicle
{
    public Ducati()
    {
        NoOfWheels = 2;
    }

    public override void Display()
    {
        Console.WriteLine($"The number of wheels for the {nameof(Ducati)} is {NumberOfWheels}");
    }
}

public class Lamborghini : Vehicle
{
    public Lamborghini()
    {
        NoOfWheels = 4;
    }

    public override void Display()
    {
        Console.WriteLine($"The number of wheels for the {nameof(Lamborghini)} is {NumberOfWheels}");
    }
}

नीचे कोड स्निपेट है जहां पॉलीमॉर्फिज़्म प्रदर्शित किया गया है। वस्तु आधार प्रकार के लिए बनाई गई है Vehicle एक चर का उपयोग कर vehicle लाइन 1. पर यह आधार वर्ग विधि कॉल Display() लाइन 2 पर और दिखाए गए अनुसार उत्पादन प्रदर्शित करते हैं।

 static void Main(string[] args)
 {
    Vehicle vehicle = new Vehicle();    //Line 1
    vehicle.Display();                  //Line 2  
    vehicle = new Ducati();             //Line 3
    vehicle.Display();                  //Line 4
    vehicle = new Lamborghini();        //Line 5
    vehicle.Display();                  //Line 6
 }

लाइन 3 पर, vehicle ऑब्जेक्ट को व्युत्पन्न वर्ग Ducati को इंगित किया जाता है और इसकी Display() विधि को कॉल करता है, जो आउटपुट को प्रदर्शित करता है। यहाँ बहुपद व्यवहार आता है, भले ही वस्तु vehicle प्रकार का Vehicle , इसे व्युत्पन्न वर्ग विधि Display() क्योंकि Ducati बेस क्लास Display() विधि को ओवरराइड करता है, क्योंकि vehicle ऑब्जेक्ट Ducati ओर इंगित किया जाता है।

जब यह Lamborghini प्रकार के Display() विधि को लागू करता है, तो वही स्पष्टीकरण लागू होता है।

आउटपुट नीचे दिखाया गया है

The number of wheels for the Vehicle is 0        // Line 2 
The number of wheels for the Ducati is 2         // Line 4
The number of wheels for the Lamborghini is 4    // Line 6

बहुरूपता के प्रकार

बहुरूपता का अर्थ है कि एक ऑपरेशन को कुछ अन्य प्रकारों के मूल्यों पर भी लागू किया जा सकता है।

बहुरूपता के कई प्रकार हैं:

  • तदर्थ बहुरूपता:
    function overloading । लक्ष्य यह है कि जेनेरिक होने की आवश्यकता के बिना विभिन्न तरीकों के साथ एक विधि का उपयोग किया जा सकता है।
  • पैरामीट्रिक बहुरूपता:
    सामान्य प्रकार का उपयोग है। जेनरिक देखें
  • Subtyping:
    एक समान कार्यक्षमता को सामान्य करने के लिए एक वर्ग का लक्ष्य विरासत में मिला है

तदर्थ बहुरूपता

Ad hoc polymorphism का लक्ष्य एक विधि बनाना है, जिसे विभिन्न डेटाटाइप द्वारा फ़ंक्शन कॉल या जेनरिक में टाइप-रूपांतरण की आवश्यकता के बिना बुलाया जा सकता है। निम्नलिखित विधि (ओं) sumInt(par1, par2) को अलग-अलग sumInt(par1, par2) साथ बुलाया जा सकता है और इसमें प्रत्येक प्रकार के स्वयं के कार्यान्वयन के संयोजन हैं:

public static int sumInt( int a, int b)
{
    return a + b;    
}

public static int sumInt( string a, string b)
{
    int _a, _b;
    
    if(!Int32.TryParse(a, out _a))
        _a = 0;
    
    if(!Int32.TryParse(b, out _b))
        _b = 0;
    
    return _a + _b;
}

public static int sumInt(string a, int b)
{
    int _a;
    
    if(!Int32.TryParse(a, out _a))
        _a = 0;    
    
    return _a + b;
}

public static int sumInt(int a, string b)
{        
    return sumInt(b,a);
}

यहाँ एक उदाहरण कॉल है:

public static void Main()
{
    Console.WriteLine(sumInt( 1 , 2 ));  //  3
    Console.WriteLine(sumInt("3","4"));  //  7
    Console.WriteLine(sumInt("5", 6 ));  // 11
    Console.WriteLine(sumInt( 7 ,"8"));  // 15
}

Subtyping

समरूपता एक समान व्यवहार को सामान्य बनाने के लिए आधार वर्ग से विरासत का उपयोग है:

public interface Car{
    void refuel();
}

public class NormalCar : Car
{
    public void refuel()
    {
        Console.WriteLine("Refueling with petrol");    
    }
}

public class ElectricCar : Car
{
    public void refuel()
    {
        Console.WriteLine("Charging battery");    
    }
}

NormalCar और ElectricCar दोनों वर्गों में अब ईंधन भरने की विधि है, लेकिन उनका अपना कार्यान्वयन है। यहाँ एक उदाहरण है:

public static void Main()
{
    List<Car> cars = new List<Car>(){
        new NormalCar(),
        new ElectricCar()
    };
    
    cars.ForEach(x => x.refuel());
}

उत्पादन निम्नलिखित होगा:

पेट्रोल के साथ ईंधन भरने
बैटरी चार्ज हो रही है



Modified text is an extract of the original Stack Overflow Documentation
के तहत लाइसेंस प्राप्त है CC BY-SA 3.0
से संबद्ध नहीं है Stack Overflow