Polymorfism i C # - Topp 2 former av polymorfism i C # med kod

Innehållsförteckning:

Anonim

Introduktion till polymorfism i C #

Polymorfism är en av principerna för objektorienterad programmering. Poly betyder flera och omformande medel för att genomgå en transformation, polymorfism betyder alltså förmågan att ta flera former.

Operatörernas utgång varierar beroende på operandtyperna, vilket är en form av polymorfism som kallas operatörens överbelastning. Här kan operatören ta flera former för att producera olika utgångar. Utgången från funktionerna varierar baserat på olika returtyper och parametrar, vilket är en annan form av polymorfism, så kallad Function Overloading. Här tar funktionen flera former för att producera flera utgångar.

Polymorfism används i stor utsträckning för att genomföra arv. Objekt som har olika inre strukturer kan implementera ett gemensamt gränssnitt genom polymorfism. Följande diagram illustrerar hur polymorfism fungerar:

Denna siffra förklarar att lera är det överordnade objektet från vilket kruka, skål och leksaksföremål är gjorda. Alla dessa föremål skiljer sig från varandra men de har egenskaperna för lera. Dessa tre föremål har olika former och används på olika sätt även när de är gjorda av samma material lera.

Former för polymorfism

Nedan är de två formerna av polymorfism:

1. Operatörens överbelastning

En operatör kan ge olika utgångar baserat på typen av operander som den arbetar med. Detta kallas operatörens överbelastning. Exempelvis kan operatören '+' utföra tillägg på två heltal, medan den kan sammanfoga två strängar. Således kan samma operatör användas på två olika sätt. Tilläggsoperatören lägger i allmänhet två nummer. När det gäller komplexa nummer är tillägget dock lite annorlunda, där motsvarande verkliga delar och imaginära delar läggs till separat. Här är ett exempelkod som visar hur operatören "+" kan överbelastas för att lägga till komplexa nummer:

Koda:

using System;
namespace Overload (
class Complex
(
public double x;
public double y;
// no-argument constructor
public Complex() ()
// parameterized constructor
public Complex(double real, double img)
(
x = real;
y = img;
)
// Overloading of Binary "+" operator
public static Complex operator + (Complex c1,
Complex c2)
(
Complex c3 = new Complex();
c3.x = c1.x + c2.x;
c3.y = c1.y + c2.y;
return c3;
)
// function to display result
public void display()
(
Console.WriteLine("(0) + (1)i", x, y);
)
)
class CalNum (
// Driver Code
static void Main(string() args)
(
Complex num1 = new Complex(2.5, 3.5);
Complex num2 = new Complex(1.2, 6.5);
Complex num3 = num1 + num2;
Console.Write("c1 = ");
num1.display();
Console.Write("c2 = ");
num2.display();
Console.Write("c3 = ");
num3.display();
)
)
)

Produktion:

Denna utgång illustrerar operatörens överbelastning för att lägga till två komplexa nummer. Koden visar överbelastning av operatör samt överbelastning av funktioner.

2. Funktion överbelastning

En funktion kan ge olika utgångar baserat på antalet parametrar såväl som deras returtyper och funktionens returtyp. Ovan nämnda kod täcker också överbelastning av funktioner med hjälp av en konstruktör. Det finns två konstruktörer i koden; den ena är standardkonstruktören som lämnas tom medan den andra är en parametrerad konstruktör som används för att initiera det komplexa antalet med de värden som nämns som parametrar.

Med exemplet illustrerat i figuren är formen att lera och slagriktningen är det organ som tillhandahålls för att forma leran. Baserat på olika slagriktningar förvandlas lera till potten, skålen respektive leksaken.

Koda:

using System;
using System.Collections.Generic;
public class Clay
(
// A few example members
public int Height ( get; set; )
public int strokeDirection ( get; set; )
// Virtual method
public virtual void Mould()
(
Console.WriteLine("Beginning to mould the clay");
)
)
class Pot : Clay
(
public override void Mould()
(
// Code to make a pot Console.WriteLine("Making a pot");
base.Mould();
)
)
class Bowl : Clay
(
public override void Mould()
(
// Code to make a bowl
Console.WriteLine("Making a bowl");
base.Mould();
)
)
class Toy : Clay
(
public override void Mould()
(
// Code to make a toy
Console.WriteLine("Making a toy");
base.Mould();
)
)
class Program
(
static void Main(string() args)
(
// Illustrating Polymorphism #1: a Pot, Bowl and Toy
// can all be used wherever Clay is expected. No cast is
// needed because an implicit conversion exists from a derived
// class to its base class.
var items = new List
(
new Pot(),
new Bowl(),
new Toy()
);
// Polymorphism at work #2: the virtual method Mould is
// invoked on each of the derived classes, not the base class.
foreach (var item in items)
(
item.Mould();
)
)
)

Produktion:

Som du kanske har noterat i koden är lerklassen den överordnade klassen vars barnklasser är en leksak och leksaker. Metoden 'Mold' definieras i förälderklassen såväl som barnklassen med samma funktionssignatur. Därför, när ett objekt i barnklassen skapas och det kallar metoden Mold, blir basklassmetoden åsidosatt av metod för barnklass. Således ser vi resultatet från metod för barnklass. Ovanstående kod visar metodöverskridande och inte överbelastning för att illustrera polymorfism.

Poäng som ska hållas i åtanke för polymorfism i c #

  1. Överbelastning skiljer sig från överbestyrning. Överbelastning har olika funktionssignaturer medan åsidosättande har samma funktionssignaturer
  2. Polymorfism avser att ändra beteendet hos en superklass i underklassen.
  3. Arv avser att använda strukturen och beteendet hos en superklass i en underklass.

Följande är några viktiga takeaways:

  1. Polymorfism är ett av de viktigaste paradigmerna för objektorienterad programmering.
  2. Funktionsöverbelastning ändrar funktionen enligt funktionens returtyper och parametrar i den ärvda klassen.
  3. Operatörens överbelastning modifierar operatörens definition enligt givna parametrar.
  4. Polymorphism används för att implementera det beslutar vid körning att anropa barnklassmetoden med hjälp av metodöverskridande.

Rekommenderade artiklar

Detta är en guide till polymorfism i C #. Här diskuterar vi de två formerna av polymorfism i C # dvs. operatörens överbelastning och funktionsöverbelastning med provkod. Du kan också titta på följande artikel för att lära dig mer -

  1. Vad är StringBuilder i C #
  2. Kopiera konstruktör i C #
  3. Vad är multithreading i C #?
  4. Vad är designmönster i C #?
  5. Typer av konstruktörer i C # med kodimplementering
  6. Komplett guide till multithreading i C #