Introduktion til polymorfisme i C #
Polymorfisme er et af principperne i objektorienteret programmering. Poly betyder flere og morfiske midler til at gennemgå en transformation, polymorfisme betyder således muligheden for at tage flere former.
Operatørernes output varierer afhængigt af operandetyperne, som er en form for polymorfisme kaldet Operatøroverbelastning. Her kan operatøren tage flere former for at producere forskellige output. Output fra funktionerne varierer baseret på forskellige returtyper og parametre, hvilket er en anden form for polymorfisme kaldet Funktion Overbelastning. Her tager funktionen flere former for at producere flere output.
Polymorfisme bruges i vid udstrækning til at implementere arv. Objekter, der har forskellige interne strukturer, kan implementere en fælles grænseflade gennem polymorfisme. Følgende diagram illustrerer brugen af polymorfisme:
Dette tal forklarer, at ler er det overordnede objekt, hvorfra pot, skål og legetøjsgenstande er lavet. Alle disse objekter er forskellige fra hinanden, men de har egenskaberne med ler. Disse tre genstande har forskellige former og bruges på forskellige måder, selv når de er lavet af det samme materiale ler.
Former for polymorfisme
Nedenfor er de 2 former for polymorfisme:
1. Operatøroverbelastning
En operatør kan give forskellige output baseret på den type operander, den opererer på. Dette kaldes operatøroverbelastning. F.eks. Kan operatøren '+' udføre tilføjelse på to heltal, mens den kan sammenkæde to strenge. Den samme operatør kan således bruges på 2 forskellige måder. Tilføjelsesoperatøren tilføjer generelt to numre. I tilfælde af komplekse tal er tilføjelsen imidlertid en smule anderledes, hvor de tilsvarende reelle dele og imaginære dele tilføjes separat. Her er et eksempel på en kode, der viser, hvordan operatøren '+' kan overbelastes for at tilføje komplekse tal:
Kode:
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:
Dette output illustrerer overbelastning af operatøren for at tilføje to komplekse tal. Koden viser operatøroverbelastning samt funktionsoverbelastning.
2. Funktion Overbelastning
En funktion kan give forskellige output baseret på antallet af parametre såvel som deres returtyper og funktionens returtype. Ovennævnte kode dækker også funktionsoverbelastning ved hjælp af en konstruktør. Der er 2 konstruktører i koden; den ene er standardkonstruktøren, der efterlades tom, mens den anden er en parameteriseret konstruktør, der bruges til at initialisere det komplekse nummer med de værdier, der er nævnt som parametre.
Ved at tage eksemplet illustreret på figuren støber funktionen leret, og slagretningen er det element, der er tilvejebragt til at forme leret. Baseret på forskellige slagretninger omdannes ler til henholdsvis gryden, skålen og legetøjet.
Kode:
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 måske har bemærket i koden, er lerklasse den overordnede klasse, hvis børneklasser er en gryde, legetøj og skålklasser. Metoden 'Mold' er defineret i forældreklassen såvel som underordnet klassen med den samme funktionssignatur. Når der oprettes et objekt i barneklassen, og det kalder metoden Mold, bliver baseklasse-metoden tilsidesat af barneklasse-metoden. Således ser vi output fra barneklasse-metoden. Ovenstående kode viser metodeoverskridelse og ikke overbelastning for at illustrere polymorfisme.
Punkter, der skal huskes på for polymorfisme i c #
- Overbelastning adskiller sig fra Overriding. Overbelastning har forskellige funktionsunderskrifter, mens tilsidesættelse har de samme funktionssignaturer
- Polymorfisme refererer til at ændre opførelsen af en superklasse i underklassen.
- Arv refererer til at bruge strukturen og opførslen af en superklasse i en underklasse.
Følgende er de få vigtigste takeaways:
- Polymorfisme er en af de største paradigmer inden for objektorienteret programmering.
- Funktion overbelastning ændrer funktionen pr. Returtyper og parametre for funktionen i den arvede klasse.
- Operatøroverbelastning ændrer operatørens definition som pr. Givne parametre.
- Polymorphism bruges til at implementere den beslutter ved kørsel at kalde barneklasse metoden ved hjælp af metodeoverskridelse.
Anbefalede artikler
Dette er en guide til polymorfisme i C #. Her diskuterer vi de to former for polymorfisme i C # dvs. Operatøroverbelastning og funktionsoverbelastning med prøvekode. Du kan også se på den følgende artikel for at lære mere -
- Hvad er StringBuilder i C #
- Kopiér konstruktør i C #
- Hvad er multithreading i C #?
- Hvad er designmønster i C #?
- Konstruktortyper i C # med kodeimplementering
- Komplet guide til multithreading i C #